阻止 Javascript 执行阻止 selenium webdriver

Stop Javascript execution from blocking selenium webdriver

本文关键字:selenium webdriver Javascript 执行 阻止      更新时间:2023-09-26

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

在我的自动化测试中,selenium webdriver 点击一个元素,这反过来又会执行一些 Javascript。

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

@IE.switch_to.alert.accept

但是,在这种情况下,控制权不会传递回 Web 驱动程序,我无法接受警报。

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

但是由于 Web 驱动程序要求 javascript 在接受警报之前完成执行,因此无法接受警报,并且 javascript 将永远不会完成执行。


我无权修改Javascript,所以修复必须在硒方面。

有什么方法可以在不强迫网络驱动程序等待的情况下执行 Javascript?

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

正如评论者建议的那样,在单独的线程中运行javascript使我能够重新获得对Web驱动程序的控制:********错误 - 请参阅更新2

*******
Thread.new{
  button.press
}

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

@IE.switch_to.alert

^ 不工作

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

即使在线程中运行时,javascript 的执行仍然会阻止 Web 驱动程序的任何进一步执行。

我正在使用硒网格远程执行测试。

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

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

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

谢谢!

如果您知道触发该警报的函数,则可以尝试使用javascript执行器。 像下面这样的东西

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

谢谢穆拉利