【问题标题】:Laravel Dusk how to check if element is visible/clickable?Laravel Dusk 如何检查元素是否可见/可点击?
【发布时间】:2018-01-29 18:00:28
【问题描述】:

我有一种情况,我不想检查元素是否存在且可见/可点击。如果没有,脚本处理将继续。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    迟到总比没有好。

    isDisplayed() 效果很好(但如果它被其他元素覆盖则不会)...

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

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

    【讨论】:

      【解决方案2】:

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

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

      这对我有用。

      【讨论】:

        【解决方案3】:

        如果你不知道你想要完成什么,你总是可以等到元素可见:

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

        【讨论】:

        • 我需要检查一个元素是否存在,所以它是一个 IF 场景......等待一个元素是一个阻塞场景,其中元素绝对需要存在或处理后停止等待时间。
        猜你喜欢
        • 1970-01-01
        • 2011-08-03
        • 2017-01-01
        • 2012-07-08
        • 1970-01-01
        • 2016-07-04
        • 2014-04-22
        • 2020-08-06
        • 1970-01-01
        相关资源
        最近更新 更多