Моим приложением была 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();
Любые мысли / рекомендации очень ценятся, ребята.