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

cbjzeqam  于 2023-08-08  发布在  其他
关注(0)|答案(4)|浏览(106)

我有一个场景,我不想检查如果一个元素存在,是可见/可点击。如果不是,则脚本处理继续。
虽然 Laravel Dusk 提供了$browser->assertVisible($selector)方法,但如果元素不可见,则会出现异常。或者$browser->waitFor('.selector');,但是如果元素没有出现,这也会结束脚本处理。
以下是Selenium用于检查元素是否可见的标准:How to force Selenium WebDriver to click on element which is not currently visible?
显然Dusk没有提供这种方法。实施的最佳方式是什么?

mbzjlibv

mbzjlibv1#

迟到总比不到好,我想。
isDisplayed()工作得很好(尽管如果它被其他元素覆盖了就不行了)...

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

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

e37o9pze

e37o9pze2#

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

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

字符串
这对我很有效。

rur96b6h

rur96b6h3#

如果你不知道你要完成什么,你可以一直等到元素可见:
https://laravel.com/docs/5.5/dusk#waiting-for-elements

fae0ux8s

fae0ux8s4#

$browser->whenAvailable('.modal', function (Browser $modal) {
    $modal->assertSee('Hello World')
          ->press('OK');
});

字符串

相关问题