michielgerritsen / dusk-for-magento2
为您的Magento 2商店准备的Laravel Dusk组件,用于自动测试
Requires (Dev)
- laravel/dusk: *
This package is auto-updated.
Last update: 2024-02-17 20:14:03 UTC
README
问题:什么是Laravel Dusk?
回答:Laravel Dusk是为了编写应用程序的端到端测试而创建的。这意味着当运行测试时,会启动一个实际的Chrome浏览器,您可以给它下指令。点击链接,填写字段并提交表单。
问题:Laravel是一个框架,它与Magento有什么关系?
回答:没有关系,但Laravel Dusk能够访问从其运行的机器上可访问的任何网站。
问题:那么我该如何使用它?
回答:您需要一个完整的Laravel环境。但是您在哪里安装它?有几个选项
-
在靠近Magento的单独目录中安装
您的文件夹结构如下所示
网站
my-magento2-storemy-laravel-dusk-project
这是最干净的方法,但可能有点难以维护代码,因为它通常需要两个代码库。
-
在Magento目录中安装
转到您的Magento文件夹并运行
laravel new end-to-end-tests。 -
在Magento 2中安装独立的Laravel Dusk版本
我没有尝试过,但在理论上它可能可行:https://duncan3dc.github.io/dusk/
问题:那么测试看起来是什么样子的?
回答:当您的Laravel环境准备就绪时,下一步是在您的Laravel项目中安装Laravel Dusk
composer require laravel/dusk
创建文件 test/Browser/OrderTest.php,内容如下
namespace Tests\Browser;
use ControlAltDelete\DuskForMagento2\DataObjects\Address;
use ControlAltDelete\DuskForMagento2\Actions\AddSimpleProductToCart;
use ControlAltDelete\DuskForMagento2\Actions\FillShippingAddress;
use ControlAltDelete\DuskForMagento2\PaymentMethod\MoneyOrder;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
class OrderProductsTest extends DuskTestCase
{
protected function baseUrl()
{
return 'http://my-super-cool-project.test';
}
public function testOrderProducts()
{
$this->browse(function (Browser $browser) {
$browser->visit('/');
$browser->visit(new AddSimpleProductToCart('/fusion-backpack.html', 'Fusion Backpack'))->addToCart(2);
$browser->visit(new AddSimpleProductToCart('/push-it-messenger-bag.html', 'Push It Messenger Bag'))->addToCart(3);
$browser->visit('/checkout/');
$address = new Address(
'michiel@controlaltdelete.nl', // E-mail
'Michiel', // Firstname
'Gerritsen', // Lastname
['Simonszand 69'], // Array of streetlines
'Hoofddorp', // City
'2134ZX', // Postcode
'NL', // Country id
'0031623925470' // Postcode
);
$browser->visit(new FillShippingAddress())->fillShippingAddress($address);
$browser->press('Next');
$browser->waitUntilMissing('.loading-mask');
$browser->waitFor('.payment-method');
$browser->on(new MoneyOrder())->placeOrder();
$browser->assertSee('Thank you for your purchase!');
});
}
}
然后运行
php artisan dusk
如果测试成功,请检查您的订单。应该有一个新订单。
问题:我的测试失败了,怎么办?
回答:有几个问题
- 首先,尝试几次。其中有一些函数的等待时间可能比平均的Magento安装所需的缓存预热时间要短。所以,当你尝试几次时,所有缓存都得到了预热,你的测试可能会成功。
- 如果这没有帮助,请检查截图。每次测试失败时,Dusk都会在tests/Browser/screenshots中创建一个截图。它还试图给你一些提示,比如缺少元素。
- 此代码是在标准的Magento 2安装上编写的,所以您的安装中可能会有一些变化,例如元素名称不同。尝试在这里和那里进行微调。
注意
这主要是作为一个概念验证。它在我的环境中工作,但有很大可能不会立即在您的环境中工作。请随意提出问题或拉取请求来改进这些组件。此代码在带有样本数据的2.2.6和2.3.0的股票Magento 2上进行了测试。
组件概述
Actions\AddSimpleProductToCart
使用可选的数量添加简单产品到您的购物车中。它验证产品是否已添加到购物车中。
用法
$browser->visit(new AddSimpleProductToCart($relativeUrl, $name))->addToCart($quantity = null);
$browser->visit(new AddSimpleProductToCart('/fusion-backpack.html', 'Fusion Backpack'))->addToCart(2);
当您输入数量时,必须在产品页面上启用数量字段。您可以使用不同的产品重复此操作,以创建包含不同项目的购物车。
Actions\AddBundleProductToCart
使用可选的数量添加捆绑产品到您的购物车中。它验证产品是否已添加到购物车中。
用法
$optionList = new BundleOptionList([
new BundleOption(5, 9),
new BundleOption(6, 13),
]);
$browser->visit(new AddBundleProductToCart($relativeUrl, $name))->addToCart($optionList, $quantity = null);
$browser->visit(new AddBundleProductToCart('/fusion-backpack.html', 'Fusion Backpack'))->addToCart($optionList, 2);
这些ID指的是下拉菜单的ID和下拉菜单中选项的ID。
操作\填寫運送地址
跳轉到結賬頁面並填寫運送地址。需要提供一個\ControlAltDelete\DuskForMagento2\DataObjects\Address對象。
用法
$browser->visit(new FillShippingAddress())->fillShippingAddress($address);
支付方式\郵政匯票
這將選擇郵政匯票支付方式並點擊下單按鈕。
用法
$browser->on(new MoneyOrder())->placeOrder();
操作\管理員登錄
在管理面板上登錄。
用法
$browser->visit(new AdminLogin($frontName))->fillForm($username, $password);
$browser->visit(new AdminLogin('my-custom-frontname'))->fillForm('my-username', 'my-password');
操作\導航到配置組
導航到配置組。注意:這裡的大小寫很重要。支付方式將失敗,而支付方式將成功。
用法
$browser->on(new NavigateToConfigurationGroup)->open($tab', $name);
$browser->on(new NavigateToConfigurationGroup)->open('Sales', 'Payment Methods');