0

我正在使用这个 ("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 文件中的设备名称和浏览器名称。有什么方法可以在提供的数组上运行测试吗?包含设备和浏览器信息的数组。

4

2 回答 2

0

我知道这是旧的,但我在寻找解决方案时发现了这个页面。我最终自己构建了一个可能会满足您的用例的产品。我在正常的 Dusk 测试中遇到的最大障碍$this->browse()是使用单个实例,Laravel\Dusk\Browser并且没有引入新功能。这个实现添加了一个调用performTest到 DuskTestCase.php 文件的函数。Laravel\Dusk\Browser此函数循环遍历一组功能并为每个测试实例化一个新实例。browse此函数的工作方式与Laravel Dusk中的现有函数类似。您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.local" => "true",
            "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;
            }
        }
    }


}

示例测试

<?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');
        });
    }
}

配置/browserstack.php

<?php

return [
    'connection_url' => env('BROWSERSTACK_CONNECTION_URL')
];
于 2021-06-24T16:54:05.257 回答
0

你可以在你的最后实现这个。使用 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

于 2020-10-22T10:54:13.767 回答