【问题标题】:How to automate clicking confirmation pop-up using geb?如何使用geb自动单击确认弹出窗口?
【发布时间】:2015-07-28 13:21:26
【问题描述】:

我正在尝试使用 Groovy、Maven、GebSpock 自动化 Web 应用程序的 ui 测试。我有一个页面显示确认弹出窗口,在单击页面上的按钮后询问用户“你确定吗?-是 - 否”。我可以单击页面上的按钮,还需要单击弹出窗口中的“是”按钮。当我检查 Google Chrome 上的“是”按钮时,它看起来可用,因此我在页面上使用了这样的名称:

MyPage.groovy

import geb.Page

class page extends Page{
    static url = "myPage"
    static at = { waitFor { title == "My Page" }}

    static content =
    {
        confirmBtn {$("input[value*='Confirm']")}
        yesBtn {$("input[value*='Yes']")}
    }
}

这是我尝试点击“是”的:

MySpec.groovy

import geb.spock.GebSpec
import MyPage

    class MySpec extends GebSpec{
        def "Confirm"(){
            given:
            def page = to MyPage

            when:
            go MyPage
            page.confirmBtn.click()
            yesBtn.click()

            then:
            ...
        }
    }

因此,它给了我以下异常:

org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with

如何点击“是”按钮,您有什么建议吗?

编辑:

我通过在单击按钮之前添加以下行来调试代码:

waitFor { yesBtn.isEnabled() }
println "isDisplayed: " + yesBtn.isDisplayed()
println "isEnabled: " + yesBtn.isEnabled()

但无论我 waitFor 按钮是否启用或显示,它总是会打印:

isDisplayed: false
isEnabled: true

在阅读this post 之后,我知道 dom 需要以某种方式刷新。

【问题讨论】:

  • 你试过yesBtn(required:false) { $("input[value*='Yes']") }吗?
  • @tim_yates 在您发表评论后,我尝试了,但没有成功
  • 在 MySpec.groovy 中替换:yesBtn.click() 为:waitFor { yesBtn.click() }
  • 感谢您的建议,但效果不佳@jripoll
  • @tim_yates 很抱歉它成功了。它不起作用,因为有几个元素具有相同的值,而我乍一看并没有意识到它。如果您将评论添加为答案,那就太好了。

标签: groovy spock geb ui-testing


【解决方案1】:

由于第一次加载页面时按钮不存在,you need to inform Geb of this fact 通过传递required: false 像这样:

yesBtn(required:false) { $("input[value*='Yes']") }

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 1970-01-01
    • 2011-10-19
    • 2021-12-22
    • 1970-01-01
    • 2022-11-18
    • 2023-02-09
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多