selenium executeScript在IE上挂起

时间:2013-03-28 01:00:31

标签: java javascript internet-explorer selenium webdriver

好的伙计们,我在网上搜索了2天来解决模态对话问题。那里有很好的信息,除了IE之外它都有效。我正在尝试打开文件上传对话框并选择一个新文件。我创建了autoIT脚本,它们可以与FF和Chrome一起使用。当我尝试使用IE时,“executeScript”不会返回到我的测试脚本。在IE中,打开“文件上载”对话框。但那是我的脚本停止的地方。如果我手动运行autoIT脚本,它会在“文件上载”对话框关闭后返回测试脚本。

//WebDriver driver = new FirefoxDriver();
// processPage(driver);
WebDriver ieDriver =new InternetExplorerDriver();
processPage(ieDriver);
// WebDriver chromeDriver = new ChromeDriver();
// processPage(chromeDriver);

。 。 。其他代码 。

WebElement element = driver.findElement(By.name(uploadDifferntFile));
if (driver instanceof InternetExplorerDriver) {
  ((InternetExplorerDriver) driver).executeScript("arguments[0].click();", element);

} else if(driver instanceof FirefoxDriver){
  ((FirefoxDriver) driver).executeScript("arguments[0].click();", element);

} else if(driver instanceof ChromeDriver){
  ((ChromeDriver) driver).executeScript("arguments[0].click();", element);

}

。 。 。 AutoIt的 。 。

try {
    Process proc = Runtime.getRuntime().exec(fileToExecute);
} catch (IOException e) {
    System.out.println("Failed to execute autoIT");
    e.printStackTrace();
}

感谢您的支持

2 个答案:

答案 0 :(得分:0)

它似乎与您在IE中的参数[0] .click操作期间调用的模态对话框相关,请参阅https://code.google.com/p/selenium/wiki/InternetExplorerDriver,“单击元素或提交表单和警报()”部分,我认为它描述了同样的问题

尝试的选项很少:

  1. 使用“element.click()”或替换您的JavaScript代码 “element.sendKeys(Keys.ENTER)”
  2. 在开始之前开始新的主题 参数[0] .click,稍等一下该线程,然后运行autoIt 代码
  3. 此外,您可以使用JavascriptExecutor替换现有代码,只编写一次JavaSrcipt:

    WebElement element = driver.findElement(By.name(uploadDifferntFile));
    if (driver instanceof JavascriptExecutor) {
      ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
    }
    

答案 1 :(得分:0)

我刚刚介入了同样的问题,因为对于我使用Internet Explorer而言,sendKeys不是一个稳定的解决方案。所以我用AutoIt构建了一个变体。

对于Firefox我使用JavaScript而对于IE我在输入字段上双击:

// fileInput is the WebElement resulting from the input field with type file
if (browser == "FF") {
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("arguments[0].click();", fileInput);
} else {
    Actions action = new Actions(driver);
    Action doubleClick = action.doubleClick(fileInput).build();
    doubleClick.perform();
}