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');
}
Это сработало для меня.
Без хорошего представления о том, что вы пытаетесь достичь, вы всегда можете подождать, пока элемент не станет видимым:
$browser->whenAvailable('.modal', function (Browser $modal) {
$modal->assertSee('Hello World')
->press('OK');
});