3

好的,我已经在网上搜索了 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);

}

. . . 汽车信息技术。. .

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

感谢你的支持

4

2 回答 2

0

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

尝试的几个选项是:

  1. 将您的 JavaScript 代码替换为“element.click()”或“element.sendKeys(Keys.ENTER)”
  2. 在执行参数 [0] 之前启动一个新线程。单击,在该线程中稍等片刻,然后运行 ​​autoIt 代码

您也可以用 JavascriptExecutor 替换现有代码,只编写一次 JavaSrcipt:

WebElement element = driver.findElement(By.name(uploadDifferntFile));
if (driver instanceof JavascriptExecutor) {
  ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
}
于 2013-03-28T21:42:04.027 回答
0

我刚刚遇到了同样的问题,因为 sendKeys 不是我使用 Internet Explorer 的稳定解决方案。所以我用 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();
}   
于 2014-05-26T09:26:24.477 回答