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

时间:2014-08-07 16:51:20

标签: firefox selenium geb

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

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

&#34; 要显示此页面,Firefox必须发送重复之前执行的任何操作(例如搜索或订单确认)的信息&#34;

消息 - 由于测试不期望这个弹出窗口,它会挂起并且测试会超时。

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

GEB版本:0.9.2, Selenium版本:2.39.0

(也尝试使用上面的次要版本:0.9.3&amp; 2.40.0)

注意事项:

  • 我知道POST / Re-direct / GET模式 - 但在这种情况下我不能自由更改应用程序代码
  • 警告消息只会间歇性地导致问题(可能是5次中的1次) - 我已经将其降低到速度/竞争条件,从而测试在消息出现之前完成下一步操作 - 我知道可能的解决方案是更新测试等待消息出现然后接受,但我的问题是,是否有一个全局设置可以避免这些被触发/显示?

2 个答案:

答案 0 :(得分:3)

那个refresh()可以解决IE驱动程序的问题,它忽略了对driver.get()的调用,并且使用与当前URL相同的URL。

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

答案 1 :(得分:2)

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

我们将Spock与Geb一起使用,并将其放置在所有Spock Spec继承的Super类中。例如: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)
        }
    }
}