michielgerritsen/dusk-for-magento2

此包已被废弃,不再维护。没有建议的替代包。

为您的Magento 2商店准备的Laravel Dusk组件,用于自动测试

dev-master 2019-04-17 09:10 UTC

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-store
    • my-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');