标签: laravel-dusk

在无头(无GUI)机器上运行Laravel Dusk

随着最近Laravel 5.4的发布,我想我会试一试.就像Reddit上的Ozymandias-X一样,我也对它感到沮丧.

我的设置

  • Windows 10作为主机;
  • CentOS 7作为访客(没有GUI安装,没有Vagrant)
  • Virtual Box的共享文件夹.

如果我打开机器并运行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)

php linux laravel laravel-5.4 laravel-dusk

5
推荐指数
1
解决办法
3221
查看次数

在 Laravel Dusk 中按 Enter 键盘

在 Laravel dusk 中,如何输入文本并按 Enter 键盘?

在此输入图像描述

我的输入字段需要按 Enter 键盘才能在其中添加超过 1 个项目。

laravel laravel-dusk

5
推荐指数
1
解决办法
4324
查看次数

ExampleTest.php 中未找到类“Tests\DuskTestCase”

我正在尝试运行 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.0php 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 laravel-dusk

5
推荐指数
2
解决办法
2403
查看次数

在Laravel Dusk中记录Javascript控制台输出

我正在使用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是在页面加载时写入的。为什么黄昏看不到那些?

更新2

我发现,如果'--headless'从中的driver()方法中删除DuskTestCase,则在测试期间将显示浏览器。然后,您可以显示该浏览器的开发工具,并在测试运行时实时观看控制台输出。太快了,无法真正发挥作用,如果出现错误,浏览器将关闭,并且无论如何您都会丢失控制台上的所有内容(除非有办法让浏览器在发生故障时保持打开状态?),但请在此处添加此内容,以防万一。对某人有用!

laravel laravel-dusk laravel-5.6

5
推荐指数
1
解决办法
1314
查看次数

使用 Laravel Dusk 模拟按键(无输入元素)

我有一个页面,其中包含一些禁用的输入、跨度和 div。
在后台我等待按键。这是一些记忆游戏的背景。
我的问题是,结果证明它很难测试。
我知道两个函数来模拟输入:type()keys(). 当我使用时keys("@someElement", "34"),我得到“元素不可交互”。类似的情况发生在type()(这并不奇怪,因为 type 建议填写一些输入)。

如何在不使用活动输入元素的情况下正确模拟按键?

laravel-dusk laravel-dusk2

5
推荐指数
1
解决办法
901
查看次数

Laravel Dusk 和内存使用 - 如何关闭浏览器和自定义进程

我在控制器中使用 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)

php webdriver out-of-memory laravel laravel-dusk

5
推荐指数
1
解决办法
2696
查看次数

忽略 PHPUnit 9 中的弃用通知?

我使用 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

testing phpunit laravel laravel-dusk

5
推荐指数
1
解决办法
1万
查看次数

Laravel Dusk:找不到 Chrome 二进制文件

我正在按照有关如何使用在 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 在哪里寻找二进制文件,或者完全是其他东西?

php laravel homestead laravel-dusk laravel-8

5
推荐指数
1
解决办法
3959
查看次数

有没有办法在Laravel Dusk中声明当前URL值?

我正在使用Laravel Dusk测试具有子域路由的Web应用程序。如果某种验证无效,我在子域之间会有一些重定向。

因此,我的目标是创建visit一个URL,$a然后断言我已被重定向,而新的URL是$b

我可以:

$browser->visit($a);
Run Code Online (Sandbox Code Playgroud)

但是我不知道在检查当前URL是什么之后马上要做什么。

php laravel laravel-5 laravel-dusk laravel-5.5

4
推荐指数
3
解决办法
2339
查看次数

Laravel dusk chrome 驱动程序超时

任何人都可以帮忙吗,我无法让 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

我已经完成了以下操作:

  • 将以下内容添加到 app\Providers\AppServiceProvider.php

使用 Laravel\Dusk\DuskServiceProvider;

...

public function register()

{

    if ($this->app->environment('local', 'testing')) {

        $this->app->register(DuskServiceProvider::class);
    }

}
Run Code Online (Sandbox Code Playgroud)
  • 在终端中运行“php artisan dusk:install”
  • 将 .env 中的 App_URL 设置为http://localhost:8000
  • 在 DuskTestCase 中指定了 chromedriver 的位置
  • 在运行“php artisan dusk”之前启动“php artisanserve” …

macos laravel laravel-dusk

4
推荐指数
1
解决办法
5364
查看次数