Laravel黄昏与浏览器堆栈可在多个设备和浏览器上运行测试

问题描述

我正在使用此程序包(“ browserstack / browserstack-local”:“ ^ 1.1”)在browserstack上运行黄昏测试。现在的要求是在具有不同浏览器的多个不同设备上运行测试。目前,我正在采用这种方法来运行测试。

private function browserstackCaps($local_identifier)
{
    return [
        'project' => config('app.name'),'browserstack.local' => 'true','browser' => env('broWSER'),'device' => env('DEVICE'),'acceptSslCert' => true,'resolution' => '1920x1080'
    ];
}

方法的缺点是,每次需要在其他设备/浏览器上运行测试时,都必须更改.env文件中的设备名称和浏览器名称。有什么办法可以在提供的阵列上运行测试?包含设备和浏览器信息的数组。

解决方法

您可以在最后实现此功能。提取要使用REST API执行测试的浏览器和设备的列表,并使用它们。

要使用的REST API:

curl -u“用户名:密码”
https://api.browserstack.com/automate/browsers.json

在此了解更多信息: https://www.browserstack.com/docs/automate/api-reference/selenium/browser#get-browser-list

,

我知道这是旧的,但我在寻找解决方案时找到了这个页面。我最终自己构建了一个可能会满足您的用例的。我遇到的最大障碍是 $this->browse() 在正常的 Dusk 测试中使用的是 Laravel\Dusk\Browser 的单个实例并且没有引入新功能。此实现添加了一个名为 performTest 的函数DuskTestCase.php 文件。该函数遍历一组功能并为每个测试实例化一个新的 Laravel\Dusk\Browser 实例。此函数的工作方式与 Laravel Dusk 中现有的 browse 函数类似。您可以通过向 performTest 传递一个接受单个参数的可调用对象来调用 Laravel\Dusk\Browser,该参数是 <?php namespace Tests; use Laravel\Dusk\TestCase as BaseTestCase; use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; abstract class DuskTestCase extends BaseTestCase { use CreatesApplication; protected array $capabilities; private const BROWSERS = [ 'ios_14_iphone_xs_safari' => [ "os_version" => "14","device" => "iPhone XS","real_mobile" => "true","browserstack.local" => "true",'acceptSslCerts' => 'true' ],'mac_osx_catalina_safari' => [ "os" => "OS X","os_version" => "Catalina","browser" => "Safari","browser_version" => "13.0","browserstack.selenium_version" => "3.14.0","resolution" => "1920x1080",'acceptSslCerts' => 'true',] ]; /** * Create the RemoteWebDriver instance. * * @return \Facebook\WebDriver\Remote\RemoteWebDriver */ protected function driver() { $browserStackConnectionUrl = config('browserstack.connection_url'); return RemoteWebDriver::create( $browserStackConnectionUrl,$this->capabilities ); } protected function performTest(Callable $test){ foreach(self::BROWSERS as $browserName => $capabilitySet){ try { $this->capabilities = $capabilitySet; $browser = $this->newBrowser($this->driver()); $test($browser); $browser->quit(); fprintf(STDOUT,"\e[0;32m√ {$browserName}\r\n"); } catch(\Exception $exception){ fprintf(STDOUT,"\e[0;31mX {$browserName}\r\n"); throw $exception; } } } }

的一个实例

Dusk 测试用例

<?php

namespace Tests\Browser;

use Tests\DuskTestCase;
use Laravel\Dusk\Browser;

class ExampleTest extends DuskTestCase
{
    public function testExample()
    {
        $this->performTest(function(Browser $browser){
            $browser->visit('/')
                ->assertDontSee('Foobar');
        });
    }
}

示例测试

<?php

return [
    'connection_url' => env('BROWSERSTACK_CONNECTION_URL')
];

config/browserstack.php

map