Nat*_*ill 9 java selenium automated-tests file-upload selenium-webdriver
我一直在寻找在Selenium 2中上传文件的解决方案.
问题是我尝试上传的网页元素有两种使用方式:拖放或点击按钮.没有字段输入框.并不是说我没有尝试使用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>
Run Code Online (Sandbox Code Playgroud)
我正在使用Java,并对Selenium之外的其他方法开放(但是,我只选择了maven存储库).
谢谢!
不幸的是,你现在不能这样做(2013年1月,Selenium 2.29.1),因为Selenium不支持<input type="file" multiple>元素.
项目开发人员自己提出了一个功能增强请求,它还没有实现.您可以在那里加注星标以在优先级列表中向上移动它.
另外,据我所知,你无法真正将文件从桌面拖到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);
Run Code Online (Sandbox Code Playgroud)
它很糟糕,但它应该工作.请注意,您可能需要以下内容:如何让Robot键入`:`?并将String转换为KeyEvents(另外还有new和shiny KeyEvent#getExtendedKeyCodeForChar(),它们可以完成类似的工作,但只能从JDK7获得).
| 归档时间: |
|
| 查看次数: |
8736 次 |
| 最近记录: |