Laravel Dusk, как проверить, видим ли элемент / кликабелен?

У меня есть сценарий, в котором я не хотел бы проверять, если элемент существует и является видимым / кликабельным. Если нет, обработка сценария продолжается.

В то время как Laravel Dusk обеспечивает $browser->assertVisible($selector) метод, это заканчивается исключением, если элемент не виден. Или же $browser->waitFor('.selector'); но это также заканчивает обработку скрипта, если элемент не появляется.

Вот критерии, которые Selenium использует для проверки видимости элемента: здесь. Как заставить Selenium WebDriver щелкнуть элемент, который в данный момент не виден?

Видимо, Сумерки не предоставляют такой метод. Как лучше всего это реализовать?

4 ответа

Думаю, лучше поздно, чем никогда.

isDisplayed () работает очень хорошо (хотя и не прикрывается другими элементами)...

if($browser->driver->findElement(WebDriverBy::cssSelector('#my-selector'))->isDisplayed()) {
    // do something
}

если у меня есть наложения, покрывающие мои элементы, я использую ->waitUntilMissing(), или в крайних случаях я вызываю $browser->driver->executeScript() и запускаю некоторый jQuery, чтобы временно управлять элементом, который "мешает".

Вы можете попытаться найти элемент и попытаться получить его свойства. Если свойства пусты, элемент не виден. Например

$hiddenBtn = $browser->element('@show-more');
if($hiddenBtn && $hiddenBtn->getText()){
    $browser->click('@show-more');    
}

Это сработало для меня.

Без хорошего представления о том, что вы пытаетесь достичь, вы всегда можете подождать, пока элемент не станет видимым:

https://laravel.com/docs/5.5/dusk

      $browser->whenAvailable('.modal', function (Browser $modal) {
    $modal->assertSee('Hello World')
          ->press('OK');
});
Другие вопросы по тегам