代码之家  ›  专栏  ›  技术社区  ›  rhinds

关闭FireFox驱动程序刷新POST警告

  •  1
  • rhinds  · 技术社区  · 10 年前

    我继承了一些测试登录站点的GEB测试(以及各种错误案例/验证警告)。

    测试运行了一些验证失败,然后尝试重新导航到同一页面(只是刷新页面/dom)并尝试有效登录。使用GEB的to()方法,它检测到您正在尝试导航到您所在的页面,它只调用刷新-这里的问题是尝试刷新最后一个POST请求,并且驱动程序显示

    " 要显示此页面,Firefox必须发送将重复先前执行的任何操作(如搜索或订单确认)的信息 "

    消息-由于测试不希望出现此弹出窗口,因此它将挂起,测试将超时。

    有没有办法在Firefox网络驱动程序中关闭这些警告?或者通过Selenium或GEB自动忽略/接受它们?

    GEB版本:0.9.2, 硒版本:2.39.0

    (也尝试了以上次要版本:0.9.3和2.40.0)

    注意事项:

    • 我知道POST/Re-direct/GET模式,但在这种情况下我无权更改应用程序代码
    • 警告消息只会间歇性地(可能五分之一)引发问题-我将此归结为速度/比赛条件,即测试在消息出现之前完成下一步操作-我知道一个可能的解决方案是更新测试,等待消息出现,然后接受,但我的问题是,是否有一个全局设置可以避免这些被触发/显示?
    2 回复  |  直到 10 年前
        1
  •  3
  •   erdi    10 年前

    那个 refresh() 有没有解决IE驱动程序忽略调用的问题 driver.get() 具有与当前url相同的url。

    我将更改登录页面类的url,而不是简单地修补浏览器类(这可能会在某个地方咬到你,也可能不会)。例如,您可以添加一个无关紧要的查询字符串-我认为这只是一个 ? 最后应该足够了。这个 driver.currentUrl == newUrl 条件将求值为false,您将不再看到弹出窗口。

        2
  •  2
  •   twinj    10 年前

    如果我理解你的问题,这可能会有所帮助。在Groovy中,您可以动态修改类。

    我们将斯波克与Geb一起使用,我将其放在所有斯波克规范继承的超级类中。例如:QSpec扩展了GebSpec。

    它是对原始方法进行了轻微修改,并注释掉了原始代码,这样您就知道更改了什么。我在几个必要的地方使用这种技术来改变Geb的行为。

    static {
    
        Browser.metaClass.go = { Map params, String url ->
            def newUrl = calculateUri(url, params)
            //          if (driver.currentUrl == newUrl) {
            //              driver.navigate().refresh()
            //          } else {
            //              driver.get(newUrl)
            //          }
            driver.get(newUrl)
            if (!page) {
                page(Page)
            }
        }
    }