阻止selenium webdriver

时间:2016-03-01 23:06:51

标签: javascript ruby selenium blocking alerts

我正在使用Selenium在Ruby上编写Web应用程序的测试,但我遇到了一些麻烦。

在我的自动化测试中,selenium webdriver点击一个元素,然后执行一些Javascript。

Javascript会创建一个警报窗口,我通常会接受:

@IE.switch_to.alert.accept

但是,在这种情况下,控制权不会传回Webdriver,我无法接受警报。

似乎Javascript仍在执行 - 可能只是等待接受警报。

但是因为webdriver要求javascript完成执行才能接受警报,因此无法接受警报并且javascript永远不会完成执行。

我无权修改Javascript,因此修复必须在selenium端。

有没有办法可以在不强制webdriver等待的情况下执行Javascript?

----更新1 -----

作为一名评论者建议在单独的线程中运行javascript使我能够重新获得对webdriver的控制:************错误 - 请参阅更新2 ******** ***********

Thread.new{
  button.press
}

不幸的是,我无法像往常一样处理警报:

@IE.switch_to.alert

^无效

----更新2 -----

即使在线程中运行,javascript的执行仍会阻止webdriver进一步执行。

我正在使用Selenium Grid远程执行测试。

正因为如此,我无法向远程PC发送击键或任何类型的信号,除非远程webdriver提供了该方法,并且由于Jdriver执行阻止了webdriver(即使它正在运行单独的线程)一旦发出警报,我就无法与远程PC通信。

我对解决方案的最接近的想法就像Murali在下面建议的那样,并且用不返回警报的方法覆盖javascript方法。然而,这远非理想,我将重写的javascript方法是众多而复杂的,其中一些是数百行长。

如果有人对此事有任何建议,我们将非常感激,因为这个问题阻碍了我们项目的任何进一步进展。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您知道触发该警报的功能,那么您可以尝试使用javascript执行程序。类似下面的内容

  ((JavascriptExecutor)driver).executeScript("window.alert = function(msg){return true;};");  

谢谢你, 穆拉利