3

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

虽然Laravel Dusk提供了$browser->assertVisible($selector)方法,但如果元素不可见,这最终会引发异常。或者$browser->waitFor('.selector');,如果元素没有出现,这也会结束脚本处理。

这是 Selenium 用于检查元素是否可见的标准,可在此处找到:如何强制 Selenium WebDriver 单击当前不可见的元素?

显然 Dusk 没有提供这种方法。实施它的最佳方法是什么?

4

3 回答 3

3

我想迟到总比没有好。

isDisplayed() 工作得很好(尽管如果它被其他元素覆盖则不会)......

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

如果我有覆盖我的元素的叠加层,我使用 ->waitUntilMissing(),或者在极端情况下,我调用 $browser->driver->executeScript() 并运行一些 jQuery 来临时操作“挡道”的元素。

于 2019-10-23T17:16:30.863 回答
1

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

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

这对我有用。

于 2018-08-17T13:29:58.587 回答
0

如果不了解您要完成的工作,您总是可以等到元素可见:

https://laravel.com/docs/5.5/dusk#waiting-for-elements

于 2018-01-29T18:10:10.107 回答