当元素为'display:none'时,如何上传图像文件?

时间:2017-07-25 12:44:16

标签: javascript java selenium

我想通过Selenium上传文件。 页面网址在下方。

<div class="async-upload__thumb item-image__area">
  <div class="fab-dialog__thumb-drop-zone async-upload__thumb-drop-zone">
    <p class="async-upload__thumb-msg" display="none">SELECT IMAGE</p>
    <input type="file" accept="image/jpeg,image/gif,image/png" multiple="" style="display:none">
 </div>
</div>

但输入元素是display="none"所以我通过此代码上传了一个文件。

driver.findElement(By.xpath("//input[@type='file']")).sendKeys("test.jpg");

我得到这样的错误:

Element is not currently visible and so may not be interacted with
Command duration or timeout: 24 milliseconds 

如何上传图片文件?

2 个答案:

答案 0 :(得分:0)

我不确定这是否有效,但您可以删除样式属性。

WebElement element = driver.findElement(By.xpath("//input[@type='file']"))
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].removeAttribute('style')", element);

您可能需要再次获取元素,因为其属性已更改,或者您可能会获得StaleElementException

以上代码后面的行应该可行。

driver.findElement(By.xpath("//input[@type='file']")).sendKeys("test.jpg");

答案 1 :(得分:0)

我通过这段代码解决了这个问题。 它删除了display:none form input element。

    // Remove display : none
    // JavascriptExecutor js = (JavascriptExecutor) driver;
    // js.executeScript("$(\"input[type='file']\").css('display','')");

然后出现选择图像按钮和sendKeys()。