Selenium 无法单击打开“文件附件”对话框的按钮

Selenium 无法单击打开“文件附件”对话框的按钮,selenium,automated-tests,webdriver,selenium-webdriver,Selenium,Automated Tests,Webdriver,Selenium Webdriver,我正在使用硒2β。我正在尝试单击打开文件附件对话框的按钮。但当我点击它时,什么也没发生 <input class="zf" name="Passport" id="PassportUpload" type="file" onclick="return { oRequired : {} }" maxlength="524288"> driver.findElement(By.name("Passport")).click(); driver.findElement(按名称(“

我正在使用硒2β。我正在尝试单击打开文件附件对话框的按钮。但当我点击它时,什么也没发生

<input class="zf" name="Passport" id="PassportUpload" type="file" onclick="return { oRequired : {} }" maxlength="524288"> 


driver.findElement(By.name("Passport")).click();

driver.findElement(按名称(“Passport”))。单击();

仅使用selenium而不是selenium 2,我可以轻松地单击它。

我想问题只出现在使用Internet Explorer时,因为IE和FF处理文件输入时略有不同:在FF中,您可以单击按钮或字段来调用打开对话框,而在IE中,您可以单击按钮或双击字段

WebDriver使用本机事件,因此它向文件输入控件发送本机鼠标单击,该控件被转换为单击输入字段

它在Selenium 1中工作,因为它使用JavaScript触发事件。要使其在WebDriver中工作,您需要调用JavaScript:

WebElement upload = driver.findElement(By.name("Passport"));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", upload);
但是,Firefox中不会出现关于ve的代码,因此您可以使用以下代码:

WebElement upload = driver.findElement(By.name("Passport"));
if (driver instanceof InternetExplorerDriver) {
    ((JavascriptExecutor)driver).executeScript("arguments[0].click();", upload);
} else {
    upload.click();
}

也许可以尝试以下代码:

WebElement upload = driver.findElement(By.name("Passport"));
if (driver instanceof InternetExplorerDriver) {
    ((JavascriptExecutor)driver).executeScript("arguments[0].click();", upload);
} else if (driver instanceof FirefoxDriver) {
 ((JavascriptExecutor)driver).executeScript("arguments[0].click;", upload);
}else {
    upload.click();
}