如何使用Laravel 5.5禁用Chrome的Dusk无头模式?

时间:2017-09-14 11:22:51

标签: php laravel testing laravel-dusk

我希望能够在Laravel 5.5中使用Dusk 2.0运行我的浏览器测试时看到浏览器(特别是我可以使用$ browser-tinker()并为调试目的提供一些手动命令)。

有谁知道怎么做?我希望有一些简单的东西:

php artisan dusk --noheadless

2 个答案:

答案 0 :(得分:3)

安装Dusk应在您应用的DuskTestCase.php目录中创建一个/tests/文件。此文件中的DuskTestCase类包含driver()方法,该方法很容易覆盖(因为这是在您的应用程序中,您可以直接对其进行更改,因为它不再是程序包的一部分)。

现在,禁用无头模式就像从'--headless'实例上的$options方法中的addArguments()变量中删除ChromeOptions参数一样简单。

从Laravel 5.5开始,$ options变量看起来像这样:

$options = (new ChromeOptions)->addArguments([
    '--disable-gpu',
    //'--headless'
]);

答案 1 :(得分:0)

我写了一个bash脚本来从终端切换--headless选项。

用法:
可见浏览器: ./ run_tests-浏览器
没有浏览器: ./ run_tests

过程如下:

  1. 修改DuskTestCase.php以读取环境变量,我们将其称为DISABLE_HEADLESS_TEST。只要将其设置为true,就会在浏览器中显示测试。
  2. 制作一个shell脚本,将现有.env文件的内容复制到.env.dusk.local文件中,并将DISABLE_HEADLESS_TEST附加到.env.dusk.local的末尾,并为我们运行工匠黄昏。然后在测试完成后删除.env.dusk.local。

DuskTestCase.php

protected function driver()
{
    $driver_args = env("DISABLE_HEADLESS_TEST") ? ['--disable-gpu'] : 
                                                  ['--disable-gpu','--headless'];
    $options = (new ChromeOptions)->addArguments($driver_args);

    return RemoteWebDriver::create(
        'http://localhost:9515', DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY, $options
        )
    );
}

run_tests脚本
使它可执行sudo chmod + x run_tests

#! /bin/bash

function make_env_file_copy {
    if cp .env .env.dusk.local; then
        return 0;
    else
        echo "Error. Can't copy .env file to .env.dusk.local";
        return 1;
    fi
}

function add_line_to_env_file {
    if echo $'\r\n'"DISABLE_HEADLESS_TEST=true" >> .env.dusk.local; then
        return 0;
    else
        echo "Error. Can't write to .env.dusk.local";
        return 1;
    fi
}

#------------ MAIN --------------

if [[ $1 = "-in-browser" ]]; then

    echo "Running Dusk tests in the browser.";

    make_env_file_copy &&
    add_line_to_env_file && 
    php artisan dusk;

else
    echo "Running tests";
    php artisan dusk;
fi

echo "Cleaning up";
rm .env.dusk.local;