В Laravel Dusk Stripe Testing как исправить «В W3 C фрейм режима соответствия должен быть либо экземпляром WebDriverElement, либо целым числом, либо нулевым» - PullRequest
0 голосов
/ 14 марта 2020

Моим приложением была laravel framework 5.8, и в настоящее время я обновляю его до 6.0.

Мой Laravel Тесты браузера Dusk включают вход в Stripe, создание пользователя и подписки перед проверкой функциональности приложения.

Я использую Google Chrome Версия 80.0.3987.132 (Официальная сборка) (64-разрядная версия)

Я установил драйвер Dusk chrome на то же самое с помощью обычной команды .. .

php artisan dusk:chrome-driver 80

Мои тесты phpunit теперь все в порядке. Мои тесты заката начинают работать, но когда они достигают стадии входа в систему, они возвращают ошибку

InvalidArgumentException: In W3C compliance mode frame must be either instance of WebDriverElement, integer or null

Раздел теста заката, в котором выдается эта ошибка:

$this->browse(function (Browser $browser) use ($recr1, $screenshotEnabled) {
    $browser->waitFor('iframe[name=__privateStripeFrame5]');
    $browser->driver->switchTo()->frame('__privateStripeFrame5');

Я понимаю, что, вероятно, не рекомендуется игнорировать / заострять внимание на проблеме, но чтобы сохранить обновление до laravel 6.0, я попытался установить соответствие w3 c на false, следуя рекомендациям в:

Как отключить w3 c в chromedriver для устранения ошибки неизвестной команды: Невозможно вызвать стандартную команду не W3 C в то время как в W3 C

и

https://github.com/laravel/dusk/issues/624

путем изменения DuskTestCase. php но безрезультатно.

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

    ]);
        return RemoteWebDriver::create(
        'http://localhost:9515', DesiredCapabilities::chrome()
        ->setCapability(ChromeOptions::CAPABILITY, $options)
        ->setCapability('alwaysMatch', ['goog:chromeOptions' => ['w3c' => false]])
        , 60*1000, 60*1000
    );
}

}

Я думаю, что правильное действие на самом деле, чтобы решить проблему, и измените способ, которым я ссылаюсь на рамку полосы, например

            $browser->waitFor('iframe[name=__privateStripeFrame5]');
        $browser->driver->switchTo()->frame('__privateStripeFrame5');

, но я не уверен, как это сделать.

Я думаю, что мне, возможно, придется переключиться обратно на фрейм по умолчанию, но он еще не заработал ...

https://laracasts.com/discuss/channels/laravel/dusk-click-element-in-iframe?page=1* 104 3 *

$this->driver->switchTo()->defaultContent()->switchTo()->defaultContent();

Любые мысли / рекомендации очень ценятся, ребята.

1 Ответ

0 голосов
/ 14 марта 2020

Кажется, я решил проблему.

SwitchTo не работал ...

            $browser->waitFor('iframe[name=__privateStripeFrame5]');
    $browser->driver->switchTo()->frame('__privateStripeFrame5');

, поэтому вместо этого я использовал в пределах кадра ...

    $browser
    ->waitFor('iframe[name=__privateStripeFrame5]')
    ->withinFrame('iframe[name=__privateStripeFrame5]', function($browser){
...
        });

Спасибо Тгуньяни в его посте ...

https://www.5balloons.info/working-with-iframe-in-laravel-dusk/

...