Laravel黄昏如何检查元素是否可见/可点击?

Laravel黄昏如何检查元素是否可见/可点击?,laravel,selenium,selenium-chromedriver,laravel-dusk,laravel-dusk2,Laravel,Selenium,Selenium Chromedriver,Laravel Dusk,Laravel Dusk2,我有一个场景,我不想检查元素是否存在并且是否可见/可单击。否则,脚本处理将继续 虽然Laravel Dash提供了$browser->assertVisible($selector)方法,但如果元素不可见,则会出现异常。或$browser->waitFor('.selector')但如果元素未出现,这也会结束脚本处理 以下是Selenium用于检查元素是否可见的标准: 显然黄昏并没有提供这种方法。实现它的最佳方法是什么?如果不清楚您要实现什么,您可以一直等到元素可见: 您可以尝试查找元素并尝试检

我有一个场景,我不想检查元素是否存在并且是否可见/可单击。否则,脚本处理将继续

虽然Laravel Dash提供了
$browser->assertVisible($selector)
方法,但如果元素不可见,则会出现异常。或
$browser->waitFor('.selector')但如果元素未出现,这也会结束脚本处理

以下是Selenium用于检查元素是否可见的标准:


显然黄昏并没有提供这种方法。实现它的最佳方法是什么?

如果不清楚您要实现什么,您可以一直等到元素可见:


您可以尝试查找元素并尝试检索其属性。如果属性为空,则元素不可见。例如

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

这对我很有效。

我想迟做总比不做好

isDisplayed()工作得非常好(尽管如果它被其他元素覆盖了,则不会)


如果有覆盖元素的覆盖,我会使用->waitUntilMissing(),或者在极端情况下,我会调用$browser->driver->executeScript(),并运行一些jQuery来临时处理“碍事”的元素

我需要的是检查元素是否存在,所以这是一个if场景。。。等待一个元素是一种阻塞场景,在这种场景中,元素绝对需要存在,或者在等待时间过后处理停止。
if($browser->driver->findElement(WebDriverBy::cssSelector('#my-selector'))->isDisplayed()) {
    // do something
}