我一直在寻找在 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>
我正在使用 Java,并且对 Selenium 之外的其他方法开放(但是,我只有选择的 Maven 存储库)。
谢谢你!
不幸的是,你现在还不能这样做(2013 年 1 月,Selenium 2.29.1),因为 Selenium 不支持<input type="file" multiple>
元素。
有功能增强请求 http://code.google.com/p/selenium/issues/detail?id=2239这是项目开发者自己制定的,只是还没有实施。您可以在那里给它加注星标,以将其在优先级列表中向上移动。
另外,据我所知,您无法真正将文件从桌面拖动到WebElement
以可靠的方式。
解决方法可能是使用AutoIT http://www.autoitscript.com/site/autoit/(仅限 Windows)或Robot http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html类(也仅适用于与您类似的设置)并在对话框中“盲目”输入路径:
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);
这很糟糕,但应该可以。请注意,您可能需要这些:如何让机器人输入“:”? https://stackoverflow.com/questions/5736129/how-can-i-make-robot-type-a and 将字符串转换为按键事件 https://stackoverflow.com/questions/1248510/convert-string-to-keyevents(加上还有新的、闪亮的KeyEvent#getExtendedKeyCodeForChar() http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html#getExtendedKeyCodeForChar%28int%29它执行类似的工作,但只能从 JDK7 获得)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)