我有一个场景,我不想检查如果元素存在且可见/可点击。如果没有,脚本处理继续。
当 Laravel Dusk 提供$browser->assertVisible($selector)
方法时,如果元素不可见,则会以异常结束。或$browser->waitFor('.selector');
但如果元素没有出现,这也会结束脚本处理。
以下是Selenium用于检查可见元素的标准:How to force Selenium WebDriver to click on element which is not currently visible?
显然黄昏并没有提供这种方法。实施它的最佳方法是什么?
答案 0 :(得分:1)
迟到总比不到我想像的要好。
isDisplayed()效果很好(尽管如果被其他元素覆盖则不能)...
if($browser->driver->findElement(WebDriverBy::cssSelector('#my-selector'))->isDisplayed()) {
// do something
}
如果我有覆盖元素的覆盖层,则使用-> waitUntilMissing(),或者在极端情况下,我调用$ browser-> driver-> executeScript()并运行一些jQuery来临时操纵“办法”。
答案 1 :(得分:0)
如果不了解您要完成的任务,您可以一直等到元素可见:
答案 2 :(得分:0)
您可以尝试查找元素并尝试检索其属性。如果属性为空,则该元素不可见。例如
$hiddenBtn = $browser->element('@show-more');
if($hiddenBtn && $hiddenBtn->getText()){
$browser->click('@show-more');
}
这对我有用。