在github动作上测试时的laravel黄昏错误

问题描述

我已经计划使用黄昏进行简单的管理员登录测试。当我在本地计算机(我自己的本地计算机)上执行登录管理测试用例时,一切正常。

这里是我的DuskTestCase.PHP代码段:

...
    protected function driver()
    {
        $options = (new ChromeOptions)->addArguments([
            '--disable-gpu','--headless','--window-size=1920,1080',]);

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

我的LoginTest.PHP片段位于test/browser

...
    public function testLoginAdmin()
    {
        $this->browse(function (browser $browser) {
            $browser->visit('/login')
                    ->type('#email','admin@admin')
                    ->type('#password','admin')
                    ->press('LOGIN')
                    ->assertPathIs('/admin/dasbor');;
        });
    }
...

这是我本地计算机的输出

$ PHP artisan dusk
Warning: TTY mode is not supported on Windows platform.
PHPUnit 9.2.5 by Sebastian Bergmann and contributors.


DevTools listening on ws://127.0.0.1:63025/devtools/browser/26e3002f-4050-4549-9220-246558a7efd6
.                                                                   1 / 1 (100%)

Time: 00:08.528,Memory: 16.00 MB

OK (1 test,1 assertion)

但是当我运行github动作时会出错。 我的.env.dusk文件

APP_NAME="Pins SmartPJU"
APP_ENV=local
APP_KEY=base64:8CpKYwb2PE3aRhzRUwh3XMg/+VwlLVM1B0AqhyhR8B0=
APP_DEBUG=true
APP_URL=http://127.0.0.1:8000

LOG_CHANNEL=stack

DB_CONNECTION=sqlite
DB_DATABASE=database/database.sqlite
...
///the rest is default

这是yml:

name: dusk testing

on:
  pull_request:
    branches: [ master ]

jobs:
  laravel-tests:

    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    - name: copy .env
      run: PHP -r "file_exists('.env') || copy('.env.dusk','.env');"
    - name: Install Dependencies
      run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
    - name: Generate key
      run: PHP artisan key:generate
    - name: Directory Permissions
      run: chmod -R 777 storage bootstrap/cache
    - name: Upgrade Chrome Driver
      run: PHP artisan dusk:chrome-driver 70
    - name: Start Chrome Driver
      run: ./vendor/laravel/dusk/bin/chromedriver-linux > /dev/null 2>&1 &
    - name: Run Dusk Tests
      run: |
        PHP artisan serve > /dev/null 2>&1 &
        chmod -R 0755 vendor/laravel/dusk/bin/
        PHP artisan dusk

最后,错误输出

Run PHP artisan serve > /dev/null 2>&1 &
Warning: TTY mode requires /dev/tty to be read/writable.
PHPUnit 9.2.5 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 01:22.789,Memory: 18.00 MB

There was 1 error:

1) Tests\browser\LoginTest::testLoginAdmin
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session/5e36290494b538df79cb44f5a5b7b459/log with params: {"type":"browser"}

Operation timed out after 30001 milliseconds with 0 bytes received

/home/runner/work/pins-pju/pins-pju/vendor/PHP-webdriver/webdriver/lib/Remote/HttpCommandExecutor.PHP:331
/home/runner/work/pins-pju/pins-pju/vendor/PHP-webdriver/webdriver/lib/Remote/RemoteWebDriver.PHP:590
/home/runner/work/pins-pju/pins-pju/vendor/PHP-webdriver/webdriver/lib/Remote/RemoteExecuteMethod.PHP:27
/home/runner/work/pins-pju/pins-pju/vendor/PHP-webdriver/webdriver/lib/WebDriverOptions.PHP:166
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/browser.PHP:396
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/Concerns/Providesbrowser.PHP:161
/home/runner/work/pins-pju/pins-pju/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.PHP:176
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/Concerns/Providesbrowser.PHP:162
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/Concerns/Providesbrowser.PHP:78
/home/runner/work/pins-pju/pins-pju/tests/browser/LoginTest.PHP:24

Caused by
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http GET to /session/5e36290494b538df79cb44f5a5b7b459/screenshot

Operation timed out after 30001 milliseconds with 0 bytes received

/home/runner/work/pins-pju/pins-pju/vendor/PHP-webdriver/webdriver/lib/Remote/HttpCommandExecutor.PHP:331
/home/runner/work/pins-pju/pins-pju/vendor/PHP-webdriver/webdriver/lib/Remote/RemoteWebDriver.PHP:590
/home/runner/work/pins-pju/pins-pju/vendor/PHP-webdriver/webdriver/lib/Remote/RemoteWebDriver.PHP:371
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/browser.PHP:382
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/Concerns/Providesbrowser.PHP:146
/home/runner/work/pins-pju/pins-pju/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.PHP:176
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/Concerns/Providesbrowser.PHP:147
/home/runner/work/pins-pju/pins-pju/vendor/laravel/dusk/src/Concerns/Providesbrowser.PHP:70
/home/runner/work/pins-pju/pins-pju/tests/browser/LoginTest.PHP:24

ERRORS!
Tests: 1,Assertions: 1,Errors: 1.
##[error]Process completed with exit code 2.

以前,我尝试使用PHP artisan dusk:chrome-driverPHP artisan dusk:chrome-driver 70更改chrome驱动程序版本。仍然是错误

解决方法

也许您需要添加一个步骤来运行迁移。 我有一些与您相似的东西,但有额外的步骤:

      - name: Upgrade Chrome Driver
        run: php artisan dusk:chrome-driver `/opt/google/chrome/chrome --version | cut -d " " -f3 | cut -d "." -f1`
      - name: Run Migrations
        run: php artisan migrate
      - name: Change permissions to dusk
        run: chmod -R 0755 vendor/laravel/dusk/bin/ 
      - name: Run Laravel Server
        run: php artisan serve  > /dev/null 2>&1 &
      - name: curl to localhost
        run: curl localhost:8000 &
      - name: Start Chrome Driver
        run: ./vendor/laravel/dusk/bin/chromedriver-linux > /dev/null 2>&1 &
      - name: Run Dusk Tests
        run: php artisan dusk

我还添加了curl命令以测试应用程序是否正在运行。