如何在没有文本框的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