无法使用输入元素上的sendKeys上传文件

时间:2015-01-21 14:13:04

标签: java javascript angularjs selenium selenium-webdriver

为了避免上传文件的窗口对话框,我尝试了以下内容:

driver.findElement(By.xpath("//span[@class='ab-attachment-item']/input")).sendKeys(filePath);

以下是HTML代码段:

<div class="ab-attachments">
  <span class="ab-attachment-item" ng-hide="isReadOnly()" style="background-color: transparent;">
    <input class="ab-attachment-input ng-isolate-scope firefinder-match" type="file" rx-file-upload="file" accept=".pdf,image/*" style="background-color: transparent;">

但它导致错误:

org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with

我想确认此错误是由于ng-hide="isReadOnly()"代码中的span造成的吗?

如何使用Selenium WebDriver本身(使用JavaScriptExecutor或其他东西)来解决这个问题?

为了处理这个对话框,可以使用其他工具,如Sikuli,AutoIt;但我想避免这种开销。

2 个答案:

答案 0 :(得分:0)

你应该可以这样做:

driver.findElement(By.className("ab-attachment-input ng-isolate-scope firefinder-match")).sendKeys(filePath);

如果没有尝试在尝试sendKeys

之前添加隐式等待
Int timeoutInSeconds = 10;
WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("ab-attachment-input ng-isolate-scope firefinder-match"));

答案 1 :(得分:0)

//我会使用隐式等待并直接调用输入元素

new WebDriverWait(driver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[rx-file-upload='file'][accept=".pdf,image/*"]"))).sendKeys("filePathWithExtension");