如何使用 Laravel 5.5 禁用 Chrome 的 Dusk 无头模式?
How do you disable Chrome's headless mode for Dusk using Laravel 5.5?
我希望能够在 运行 我的浏览器在 Laravel 5.5 中使用 Dusk 2.0 进行测试时看到浏览器(特别是这样我可以使用 $browser-tinker() 并给它一些用于调试目的的手动命令)。
有人知道怎么做吗?我希望有一些简单的东西:
php artisan dusk --noheadless
安装 Dusk 应该会在您应用的 /tests/
目录中创建一个 DuskTestCase.php
文件。此文件中的 DuskTestCase
class 包含一个 driver()
方法,该方法很容易覆盖(因为它在您的应用程序中,您可以直接在其中进行更改,因为它不再是包的一部分).
禁用无头模式现在非常简单,只需从 $options
变量中删除 ChromeOptions
实例的 addArguments()
方法中的 '--headless'
参数即可。
自 Laravel 5.5 起,$options 变量将如下所示:
$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
//'--headless'
]);
我写了一个 bash 脚本来从终端切换 --headless 选项。
用法:
浏览器可见:./run_tests -in-browser
没有浏览器:./run_tests
过程如下:
- 修改DuskTestCase.php读取环境变量,暂且称之为DISABLE_HEADLESS_TEST。每当它设置为 true 时,都会在浏览器中显示测试。
- 制作一个 shell 脚本,将现有 .env 文件的内容复制到 .env.dusk.local 文件中,并将 DISABLE_HEADLESS_TEST 附加到 .env.dusk.local 的末尾,并且为我们运行 artisan dusk。然后在测试完成后删除 .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 [[ = "-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;
我希望能够在 运行 我的浏览器在 Laravel 5.5 中使用 Dusk 2.0 进行测试时看到浏览器(特别是这样我可以使用 $browser-tinker() 并给它一些用于调试目的的手动命令)。
有人知道怎么做吗?我希望有一些简单的东西:
php artisan dusk --noheadless
安装 Dusk 应该会在您应用的 /tests/
目录中创建一个 DuskTestCase.php
文件。此文件中的 DuskTestCase
class 包含一个 driver()
方法,该方法很容易覆盖(因为它在您的应用程序中,您可以直接在其中进行更改,因为它不再是包的一部分).
禁用无头模式现在非常简单,只需从 $options
变量中删除 ChromeOptions
实例的 addArguments()
方法中的 '--headless'
参数即可。
自 Laravel 5.5 起,$options 变量将如下所示:
$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
//'--headless'
]);
我写了一个 bash 脚本来从终端切换 --headless 选项。
用法:
浏览器可见:./run_tests -in-browser
没有浏览器:./run_tests
过程如下:
- 修改DuskTestCase.php读取环境变量,暂且称之为DISABLE_HEADLESS_TEST。每当它设置为 true 时,都会在浏览器中显示测试。
- 制作一个 shell 脚本,将现有 .env 文件的内容复制到 .env.dusk.local 文件中,并将 DISABLE_HEADLESS_TEST 附加到 .env.dusk.local 的末尾,并且为我们运行 artisan dusk。然后在测试完成后删除 .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 [[ = "-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;