2013-03-28 70 views
3

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

//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(); 
} 

感谢您一直以来的支持

+0

你不需要点击刚才设置的输入字段您要使用的文件名。 'driver.findElement(By.id( “nodeW73”))明确(); (“nodeW73”))。sendKeys(“c:\\ blank.docx”);' – BevynQ 2013-03-28 01:20:51

回答

0

这似乎莫代尔你的论点在IE [0]。点击操作过程中调用对话框有关系,看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); 
} 
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(); 
}