Laravel Dusk 如何检查元素是否为visible/clickable?
Laravel Dusk how to check if element is visible/clickable?
我有一个场景,我不想检查 IF 一个元素存在并且是 visible/clickable。如果不是,脚本处理将继续。
虽然 Laravel Dusk 提供了 $browser->assertVisible($selector)
方法,但如果元素不可见,这将以异常结束。或 $browser->waitFor('.selector');
但如果元素未出现,这也会结束脚本处理。
这里是 Selenium 用来检查元素是否可见的标准:How to force Selenium WebDriver to click on element which is not currently visible?
貌似Dusk没有提供这种方法。实施它的最佳方式是什么?
如果不清楚您要完成的任务,您可以一直等到元素可见:
您可以尝试找到该元素并尝试检索它的属性。如果属性为空,则元素不可见。例如
$hiddenBtn = $browser->element('@show-more');
if($hiddenBtn && $hiddenBtn->getText()){
$browser->click('@show-more');
}
这对我有用。
我想迟到总比不到好。
isDisplayed() 效果很好(但如果它被其他元素覆盖则效果不佳)...
if($browser->driver->findElement(WebDriverBy::cssSelector('#my-selector'))->isDisplayed()) {
// do something
}
如果我有覆盖覆盖我的元素,我使用 ->waitUntilMissing(),或者在极端情况下我调用 $browser->driver->executeScript() 和 运行 一些 jQuery临时操作 "in the way" 的元素。
我有一个场景,我不想检查 IF 一个元素存在并且是 visible/clickable。如果不是,脚本处理将继续。
虽然 Laravel Dusk 提供了 $browser->assertVisible($selector)
方法,但如果元素不可见,这将以异常结束。或 $browser->waitFor('.selector');
但如果元素未出现,这也会结束脚本处理。
这里是 Selenium 用来检查元素是否可见的标准:How to force Selenium WebDriver to click on element which is not currently visible?
貌似Dusk没有提供这种方法。实施它的最佳方式是什么?
如果不清楚您要完成的任务,您可以一直等到元素可见:
您可以尝试找到该元素并尝试检索它的属性。如果属性为空,则元素不可见。例如
$hiddenBtn = $browser->element('@show-more');
if($hiddenBtn && $hiddenBtn->getText()){
$browser->click('@show-more');
}
这对我有用。
我想迟到总比不到好。
isDisplayed() 效果很好(但如果它被其他元素覆盖则效果不佳)...
if($browser->driver->findElement(WebDriverBy::cssSelector('#my-selector'))->isDisplayed()) {
// do something
}
如果我有覆盖覆盖我的元素,我使用 ->waitUntilMissing(),或者在极端情况下我调用 $browser->driver->executeScript() 和 运行 一些 jQuery临时操作 "in the way" 的元素。