问题概述
我正在尝试开始使用 Laravel Dusk,但是,我无法让它正确运行。根据我在控制台中运行它时的反馈和一些谷歌搜索,以及在 Dusk 发布之前我遇到过类似包的相同问题的事实,我猜测问题归结为我工作中的代理背后 -地方。关于代理,我当然可能是错的,但这是我现在唯一要做的事情。老实说,我什至不明白为什么它需要知道我的代理设置才能在本地运行本地测试?
设置
- 视窗 7 64 位
- Laravel 5.4.15
- 开发环境:Laragon
- PHP 7
黄昏安装
我做了以下安装黄昏:
composer require laravel/dusk
- 在.env中设置以下内容:
APP_URL=http://ticket.dev
AppServiceProvider
register()
在我的方法中添加了以下内容:
app/Providers/AppServiceProviders.php
use Laravel\Dusk\DuskServiceProvider;
//...
public function register()
{
if ($this->app->environment('local', 'testing')) {
$this->app->register(DuskServiceProvider::class);
}
}
运行黄昏
当我运行时php artisan dusk
,我在控制台中得到以下信息:
1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\WebDriverException: JSON decoding of remote response failed.
Error code: 4
The response: '<!DOCTYPE html>
<html>
<head>
<title>Laragon</title>
// the rest of the output is what http://localhost produces
所以它似乎是在点击http://localhost而不是我的 APP_URL?
尝试的解决方案
我找到了这个github wiki 页面driver()
,在浏览了与 Dusk 相关的供应商文件夹后,我尝试在文件的函数中设置驱动程序时设置代理tests/DuskTestCase.php
。
我尝试了以下方法,但得到的控制台输出与前面提到的相同:
protected function driver()
{
// same as DesiredCapabilities::chrome() except with proxy info
$capabilities = new DesiredCapabilities([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::CHROME,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
WebDriverCapabilityType::PROXY => [
'proxyType' => 'manual',
'httpProxy' => 'http://proxy:8080',
'sslProxy' => 'http://proxy:8080',
],
]);
return RemoteWebDriver::create(
'http://localhost:9515',
$capabilities,
);
// original code after installation
// return RemoteWebDriver::create('http://localhost:9515', DesiredCapabilities::chrome());
}
和 ...
protected function driver()
{
$capabilities = new DesiredCapabilities([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::CHROME,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
WebDriverCapabilityType::PROXY => [
'proxyType' => 'manual',
'httpProxy' => 'http://proxy:8080', // have also tried without specifying http://
'sslProxy' => 'http://proxy:8080', // have also tried without specifying http://
],
]);
return RemoteWebDriver::create(
'http://localhost:9515',
$capabilities,
null,
null,
$http_proxy = 'http://proxy', // have also tried without specifying http://
$http_proxy_port = '8080',
null
);
}
任何有关使这项工作的帮助将不胜感激,谢谢!