阻止 Javascript 执行阻止 selenium webdriver
Stop Javascript execution from blocking selenium webdriver
我正在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;};");
谢谢穆拉利
- Selenium WebDriver and JavaScript change
- 运行Selenium Webdriver Test时,不会出现警报
- 执行JavaScript代码,使用selenium webdriver或WatiN从控制台获取日志
- Selenium>如何使用Selenium Webdriver调用onClick javascript函数
- 如何使用Selenium WebDriver中的JavasSript在文本字段/框中输入值
- 如何使用Java在Selenium WebDriver的隐藏字段中键入一些文本
- 使用Selenium WebDriver单击下拉菜单不会激活Javascript来添加或删除页面中的项目
- 为Selenium Webdriver的以下href创建Xpath
- Selenium Webdriver:元素当前不可见
- 如何创建javascript执行器,使元素在selenium webdriver中可见
- Selenium-webdriver (Java Script) 等待元素消失
- selenium-webdriver 将函数数组作为参数传递给 executeScript
- Selenium webdriver JS-如何等待元素可见
- 如何将JavaScript与Selenium WebDriver Java结合使用
- Selenium webdriver JavaScript 無法點擊 link
- 在Chrome中禁用JavaScript,使用C#和Selenium WebDriver渲染页面
- Selenium Webdriver 无法在菜单中找到 href 元素
- 尝试使用 JavascriptExecutor 使用 Selenium Webdriver 单击单选按钮时出错
- 运行Selenium-webdriver时拒绝连接
- 如何删除文本字段中的默认值并使用 Selenium WebDriver 键入新值