适用于多种浏览器的Selenium-需要能够执行javascript的webDriver
Selenium for multiple browsers - Need webDriver that can execute javascript
我正在帮助构建一个自动化框架来测试我们的网站。由于测试用例必须在Chrome、Firefox和IE上运行,我们目前正在为我们的驱动程序传递一个WebDriver对象。这个对象实际上是ChromeDriver、FirefoxDriver或InternetExplorerDriver(视情况而定)
我遇到的问题是,我想让这个驱动程序打开一个新窗口来验证测试。我发现的唯一实现这一点的方法是执行javascript——请参阅此处。
为了执行javascript,驱动程序必须实现JavascriptExecutor接口。事实上,我们将使用的所有驱动程序都是JavascriptExecutors,但由于我们使用的是WebDriver接口,这并不能保证。我正在尝试运行javascript,至少作为概念的证明,但我也想知道如何正确组织我们的驱动程序对象,使其能够执行javascript,而不必明确说明它是三个驱动程序中的哪一个。
以下是我试图测试打开新窗口的javascript方法的内容。它不起作用:
if (ChromeDriver.class.isInstance(driver)) {
ChromeDriver chrome = (ChromeDriver)driver;
chrome.executeScript("window.open()");
}
for (String handle : driver.getWindowHandles()) {
System.out.println(handle);
}
在上面的例子中,我使用Chrome进行测试,所以我知道驱动程序实际上是一个ChromeDriver。我猜代码无法打开一个新窗口,因为我正在实例化一个新的驱动程序对象,我认为这在Selenium中不起作用。如果它成功了,我会继续尝试识别窗口(使用driver.getWindowHandles)并在新窗口中加载URL。
那么,代码未能打开一个新窗口的原因是我正在创建/投射一个Selenium不喜欢的新驱动程序对象吗?如果是,正确的解决方案是什么?我需要创建一个夹在Chrome、Firefox和IE驱动程序与JavascriptExecutor接口之间的新接口吗?
public interface SpecialDriver extends WebDriver, JavascriptExecutor {
}
这似乎不起作用——至少,我不能将ChromeDriver分配给SpecialDriver,因为ChromeDrivers并没有明确实现我的新组合接口,即使它同时实现了WebDriver和JavascriptExecutor。用这种方法我是不是大错特错了?提前谢谢。
正确的方法是执行以下操作:
// WARNING! Untested code. Not guaranteed
// to work or even compile.
// Assume driver is a valid WebDriver object
// TODO: Wrap in try-catch to handle invalid
// cast exception
((JavascriptExecutor)driver).executeScript("return 'your script goes here';");
虽然你说的没错,不能保证WebDriver对象也会实现JavascriptExecutor,但事实是,目前所有的实现都是这样做的
- 适用于多种浏览器的Selenium-需要能够执行javascript的webDriver
- 执行JavaScript代码,使用selenium webdriver或WatiN从控制台获取日志
- 如何在webdriver/java/kendo-ui中自动执行鼠标悬停操作
- 如何创建javascript执行器,使元素在selenium webdriver中可见
- 阻止 Javascript 执行阻止 selenium webdriver
- 无法在无头模式下使用 watir Webdriver 执行按钮元素的 onclick 事件 javascript
- 使用 selenium webdriver 执行外部.js文件
- 为什么我们需要 webdriver 的 javaScript 执行器
- 在 Node JavaScript 中使用 Selenium-Webdriver 执行“命令”
- 在Selenium WebDriver中执行“.hover”Javascript
- 通过Selenium Webdriver中的Java脚本执行器传递变量
- 使用WebDriver执行脚本触发文本字段上的事件
- 无法使用javascript在Selenium WebDriver测试中执行HTML5拖放操作
- 我如何得到JSON响应(作为字符串)与webdriver执行javascript后
- 如何为watir webdriver执行javascript来更改span id中的文本
- 如何在Ruby中执行JavaScript编写的Webdriver测试
- 在Selenium WebDriver测试中使用javascript执行拖放时出现错误
- 将javascript代码添加到任何网站,并在webdriver中每次点击文档时执行添加的功能
- WebDriver执行javascript的奇怪行为
- 为selenium webdriver ruby绑定脚本使用javascript执行器启用禁用字段