gpt4 book ai didi

javascript - 停止 Javascript 执行以阻止 selenium webdriver

转载 作者:行者123 更新时间:2023-12-03 07:33:01 24 4
gpt4 key购买 nike

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

在我的自动化测试中,selenium webdriver 单击一个元素,该元素又执行一些 Javascript。

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

@IE.switch_to.alert.accept

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

看起来 Javascript 仍在执行 - 可能只是在等待警报被接受。

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

<小时/>

我没有修改 Javascript 的权限,因此修复必须在 selenium 端。

有什么方法可以执行 Javascript,而不强制网络驱动程序等待它?

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

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

Thread.new{
button.press
}

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

@IE.switch_to.alert

^ 不起作用

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

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

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

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

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

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

谢谢!

最佳答案

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

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

谢谢你,穆拉利

关于javascript - 停止 Javascript 执行以阻止 selenium webdriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35735406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com