随着最近Laravel 5.4的发布,我想我会试一试.就像Reddit上的Ozymandias-X一样,我也对它感到沮丧.
如果我打开机器并运行php artisan dusk,我会得到以下信息:
[08:14 AM]-[root@php7]-[/var/www/html/admin]-[git master]
# php artisan dusk
PHPUnit 5.7.11 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 25.91 seconds, Memory: 10.00MB
There was 1 error:
1) Tests\Browser\LoginTest::it_should_see_email_error_message
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"binary":"\/usr\/lib64\/chromium-browser\/chromedriver","args":["no-first-run"]}}}
Operation timed out after 5001 milliseconds with 0 out of -1 bytes received
/var/www/html/admin/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:287
/var/www/html/admin/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:121
/var/www/html/admin/tests/DuskTestCase.php:42
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:180
/var/www/html/admin/vendor/laravel/framework/src/Illuminate/Support/helpers.php:639
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:181
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:111
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:85
/var/www/html/admin/tests/Browser/LoginTest.php:24 …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行 Laravel Dusk 测试,但是当我运行测试时,会弹出一个带有此消息的新 Chrome 选项卡。
Fatal error: Class 'Tests\DuskTestCase' not found in path-to-project\tests\Browser\ExampleTest.php on line 9
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所做的只是 runcomposer require --dev laravel/dusk:^1.0和php artisan dusk:install.
这是我的 ExampleTest.php(Laravel 是如何设置的)
<?php
namespace Tests\Browser;
use Laravel\Dusk\Chrome;
use Tests\DuskTestCase;
use Laravel\Dusk\DuskServiceProvider;
class ExampleTest extends DuskTestCase
{
/**
* A basic browser test example.
*
* @return void
*/
public function testBasicExample()
{
$this->browse(function ($browser) {
$browser->visit('/')
->assertSee('Laravel');
});
}
}
Run Code Online (Sandbox Code Playgroud)
DuskTestCase.php 也和 Laravel 一样,有命名空间namespace Tests;。
我正在使用 Laravel 5.4 和 …
我正在使用Laravel 5.6和Laravel Dusk 3.0.9。
黄昏非常方便,但是当在具有某些Javascript功能的页面上测试失败时,很难找出问题所在。Dusk会生成一个屏幕截图,这很有帮助,但是我真正需要的是查看Javascript控制台的输出。
显然,这是可能的-Dusk tests/Browser/console在安装过程中会创建一个目录,并且此PR建议JS控制台输出已记录,或者至少是可记录的。
尽管没有文档(我可以找到)有关如何实际执行操作。 浏览该PR中的差异时,我看到了一个新方法logConsole()(后来storeConsoleLog()在注释中重命名为@Jonas指出),但是我似乎无法使其执行任何操作,例如:
$browser->visit('/somewhere')
->select('#foo', '2')
->value('#date', '2018-07-29')
->storeConsoleLog('bar')
->assertEnabled('button[type=submit]');
Run Code Online (Sandbox Code Playgroud)
该测试失败,并生成了一个漂亮的屏幕截图,但是没有任何日志文件的迹象。我尝试过移动->storeConsoleLog('bar')链条中的位置,例如第一个或最后一个,并在链条之前或之后作为单独的一行:
$browser->visit('/somewhere')
->...full chain here;
$browser->storeConsoleLog('bar');
Run Code Online (Sandbox Code Playgroud)
但是它们都没有任何区别。我的JS有一系列,console.log()当在浏览器中测试自己时会用到这些,它们会确切告诉我出了什么问题。我期望此功能记录这些消息。
我是否误解了公关,这有可能吗?如果是这样,怎么办?
通过调试中的storeConsoleLog()方法,vendor/laravel/dusk/src/Browser.php我可以看到该方法已正确调用,但是没有控制台内容可记录。如果我手动重复测试在Chrome中执行的步骤,则会有行写入Chrome devtools控制台,实际上3是在页面加载时写入的。为什么黄昏看不到那些?
我发现,如果'--headless'从中的driver()方法中删除DuskTestCase,则在测试期间将显示浏览器。然后,您可以显示该浏览器的开发工具,并在测试运行时实时观看控制台输出。太快了,无法真正发挥作用,如果出现错误,浏览器将关闭,并且无论如何您都会丢失控制台上的所有内容(除非有办法让浏览器在发生故障时保持打开状态?),但请在此处添加此内容,以防万一。对某人有用!
我有一个页面,其中包含一些禁用的输入、跨度和 div。
在后台我等待按键。这是一些记忆游戏的背景。
我的问题是,结果证明它很难测试。
我知道两个函数来模拟输入:type()和keys(). 当我使用时keys("@someElement", "34"),我得到“元素不可交互”。类似的情况发生在type()(这并不奇怪,因为 type 建议填写一些输入)。
如何在不使用活动输入元素的情况下正确模拟按键?
我在控制器中使用 Laravel Dusk,以便用户使用我的网站获取任何网站的屏幕截图。
我的代码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Laravel\Dusk\ElementResolver;
use Exception;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Laravel\Dusk\Browser;
use Laravel\Dusk\Chrome\ChromeProcess;
use Facebook\WebDriver\WebDriverBy;
use Mail;
class ScreenController extends Controller {
public function take_screenshoot() {
$process = (new ChromeProcess)->toProcess();
if ($process->isStarted()) {
$process->stop();
}
$process->start();
$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
'--headless',
'--window-size=1920,1080',
'--no-sandbox'
]);
$capabilities = DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = retry(5, function () use ($capabilities) {
return RemoteWebDriver::create('http://localhost:9515', $capabilities, 50000, 60000);
}, 50);
$browser = new Browser($driver, …Run Code Online (Sandbox Code Playgroud) 我使用 PHPUnit 9 运行测试,当我这样做时,assertRegExp我收到警告
assertRegExp() is deprecated and will be removed in PHPUnit 10. Refactor your code to use assertMatchesRegularExpression() instead.
Run Code Online (Sandbox Code Playgroud)
如何抑制特定测试的弃用警告?
注意:-我使用 Laravel Dusk 来运行我的测试,并使用测试助手assertPathIs。
我正在按照有关如何使用在 VirtualBox 虚拟机上运行的 Homestead 全新安装 Laravel 的https://laravel.com/docs/8.x/dusk运行浏览器测试的说明进行操作。
然而,当我尝试运行时artisan dusk,它失败并告诉我它找不到 Chrome 二进制文件。
1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\UnknownErrorException: unknown error: cannot find Chrome binary`
Run Code Online (Sandbox Code Playgroud)
谷歌搜索告诉我安装 Chrome 二进制文件(当然),但这似乎已经完成了。向上滚动 CLI,我在运行时看到以下内容dusk install。
Downloading ChromeDriver binaries...
ChromeDriver binaries successfully installed for version 86.0.4240.22.
Run Code Online (Sandbox Code Playgroud)
那么我是否需要安装其他东西,或者我是否需要告诉 dusk 在哪里寻找二进制文件,或者完全是其他东西?
我正在使用Laravel Dusk测试具有子域路由的Web应用程序。如果某种验证无效,我在子域之间会有一些重定向。
因此,我的目标是创建visit一个URL,$a然后断言我已被重定向,而新的URL是$b。
我可以:
$browser->visit($a);
Run Code Online (Sandbox Code Playgroud)
但是我不知道在检查当前URL是什么之后马上要做什么。
任何人都可以帮忙吗,我无法让 Laravel dusk 在 mac high Sierra 上当前的 Laravel 5.6 项目中运行默认示例测试。
错误信息
时间:2.5 分钟,内存:14.00MB
有 1 个错误:
1) Tests\Browser\ExampleTest::testBasicExample Facebook\WebDriver\Exception\WebDriverCurlException:http POST 到 /session 时抛出 Curl 错误,参数为:{“desiredCapability”:{“browserName”:“chrome”,“platform”:“ANY ","chromeOptions":{"binary":"/Users/keith/Desktop/dusk/vendor/laravel/dusk/bin/chromedriver-mac","args":["--disable-gpu"]}}}
操作在 30002 毫秒后超时,收到 0 字节
/Users/keith/Desktop/dusk/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:286 /Users/keith/Desktop/dusk/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:126 /Users /keith/Desktop/dusk/tests/DuskTestCase.php:40 /Users/keith/Desktop/dusk/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:189 /Users/keith/Desktop/dusk/vendor/laravel /framework/src/Illuminate/Support/helpers.php:770 /Users/keith/Desktop/dusk/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:190 /Users/keith/Desktop/dusk/vendor/laravel /dusk/src/Concerns/ProvidesBrowser.php:92 /Users/keith/Desktop/dusk/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:64 /Users/keith/Desktop/dusk/tests/Browser/ExampleTest .php:21
我已经完成了以下操作:
使用 Laravel\Dusk\DuskServiceProvider;
...
public function register()
{
if ($this->app->environment('local', 'testing')) {
$this->app->register(DuskServiceProvider::class);
}
}
Run Code Online (Sandbox Code Playgroud)
laravel-dusk ×10
laravel ×9
php ×4
homestead ×1
laravel-5 ×1
laravel-5.4 ×1
laravel-5.5 ×1
laravel-5.6 ×1
laravel-8 ×1
linux ×1
macos ×1
phpunit ×1
testing ×1
webdriver ×1