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

问题描述 投票:0回答:4

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

虽然 Laravel Dusk 提供了

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

这里是 Selenium 用于检查元素是否可见的标准:如何强制 Selenium WebDriver 单击当前不可见的元素?

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

laravel selenium selenium-chromedriver laravel-dusk laravel-dusk2
4个回答
3
投票

我想迟到总比不到好。

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

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

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


3
投票

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

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

这对我有用。


0
投票

如果不知道要完成什么任务,您可以一直等到该元素可见:

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


0
投票

使用 jquery 的替代方法

$browser->waitUntil('$(".card-consumation .grafico").is(":visible")', 15);

© www.soinside.com 2019 - 2024. All rights reserved.