2013-03-28 69 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(); 
}