【问题标题】:Geb test intermittent failure firefox - org.openqa.selenium.WebDriverException: Element is not clickable at pointGeb 测试间歇性故障 firefox - org.openqa.selenium.WebDriverException:元素此时不可点击
【发布时间】:2017-08-18 06:13:03
【问题描述】:

我在 Firefox 45.0.1、Selenium 2.53.1 和以下 Jars 上的 geb UI 测试中的组件单击时间歇性地出现以下错误:

geb-spock-1.1.1.jar

geb-core-1.1.1.jar

geb-ast-1.1.1.jar

geb-waiting-1.1.1.jar

geb-implicit-assertions-1.1.1.jar

geb-exceptions-1.1.1.jar

geb-test-common-1.1.1.jar

spock-spring-1.0-groovy-2.4.jar

spock-core-1.0-groovy-2.4.jar

org.openqa.selenium.WebDriverException:元素在点(499.95001220703125、375.6000061035156)处不可点击。其他元素会收到点击:

测试间歇性地失败。在组件单击之前添加 200 毫秒的睡眠时间。 sleep(200) 确实有帮助,但为了良好的实践,我不想使用具有此类固定时间值的 sleep()。

waitFor() 也无济于事:

myButton(wait:true) {$('#myBtn')}
waitFor { myButton.isDisplayed() }
myButton.click()

全屏启动测试也不会让事情变得更好:

def setupSpec() {
        getDriver().manage().window().maximize()
    }

【问题讨论】:

标签: selenium groovy spock geb


【解决方案1】:

元素很可能是displayed,然后是clickable 我已经看到了这种带有动画的可点击元素的行为。例如

  • 页面加载
  • 按钮显示
  • 按钮开始动画
  • 按钮动画结束
  • 按钮可点击

鉴于这是间歇性的,我怀疑问题是相关的。它可能与动画无关,而是一个简单的竞争条件。

您可以向您的 pageObject 添加一个方法,或者甚至更好地创建一个自定义导航器来等待元素可点击:

def waitForAndClick(Navigator element, Integer timeoutSeconds) {
    def timeStart = new Date().getTime()
    while ( timeStart <= timeStart + timeoutSeconds ) {
        try { 
            element.click()
        }
        catch (WebDriverException ex) {
             pass
        }
        break
    }
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2015-03-18
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多