如何在没有文本框的Selenium中上传文件

我一直在寻找在Selenium 2中上传文件的解决方案。

问题是,我尝试上传的Web元素有两种使用方式:拖放或单击按钮。没有字段输入框。并不是说我没有尝试使用sendKeys。我已经在按钮以及所有周围的元素上进行了尝试。

此问题的第二部分是我在Windows计算机上编写,但是自动化发生在Linux计算机上。这意味着AutoIt不起作用。这是上传框的HTML。

<div class="up-target" id="up-drop-zone">

<div class="up-drop-zone-pre hidden">

<p>Please choose a folder to upload</p>

</div>

<div class="up-drop-zone-decor">

<p>Drop one or more files here</p>

<p>or</p>

<button name="uploadFile" class="upload">Select Files</button>

<input type="file" id="up-drop-zone-input" name="files[]" multiple="true">

</div>

</div>

我正在使用Java,并且可以使用Selenium之外的其他方法(但是,我只具有选择的Maven存储库)。

谢谢!

回答:

不幸的是,由于Selenium不支持<input type="file" multiple>元素,您目前无法做到这一点(2013年1月,Selenium

2.29.1)。

项目开发人员自己对此有一个功能增强请求,但尚未实现。您可以在此处加注星标以将其在优先级列表中向上移动。

另外,据我所知,您无法真正WebElement可靠地将文件从桌面拖到。

解决方法可能是使用AutoIT(仅Windows)或Robot类(也将仅在与您类似的设置上起作用),然后在对话框中“盲目”键入路径:

driver.findElement(By.id("up-drop-zone-input")).click();

Robot r = new Robot();

r.keyPress(KeyEvent.VK_C); // C

r.keyRelease(KeyEvent.VK_C);

r.keyPress(KeyEvent.VK_COLON); // : (colon)

r.keyRelease(KeyEvent.VK_COLON);

r.keyPress(KeyEvent.VK_SLASH); // / (slash)

r.keyRelease(KeyEvent.VK_SLASH);

// etc. for the whole file path

r.keyPress(KeyEvent.VK_ENTER); // confirm by pressing Enter in the end

r.keyRelease(KeyEvent.VK_ENTER);

它很烂,但应该可以。请注意,您可能需要这些:如何使机械手键入?并将String转换为KeyEvents(另外还有一些新功能和亮点KeyEvent#getExtendedKeyCodeForChar(),它们的工作类似,但仅JDK7提供)。

以上是 如何在没有文本框的Selenium中上传文件 的全部内容, 来源链接: utcz.com/qa/414612.html

回到顶部