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

时间:2018-01-29 18:00:29

标签: laravel selenium selenium-chromedriver laravel-dusk laravel-dusk2

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

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

以下是Selenium用于检查可见元素的标准:How to force Selenium WebDriver to click on element which is not currently visible?

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

3 个答案:

答案 0 :(得分:1)

迟到总比不到我想像的要好。

isDisplayed()效果很好(尽管如果被其他元素覆盖则不能)...

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

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

答案 1 :(得分:0)

如果不了解您要完成的任务,您可以一直等到元素可见:

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

答案 2 :(得分:0)

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

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

这对我有用。