如何在java中使用selenium上传文件

如何在java中使用selenium上传文件,java,selenium,upload,Java,Selenium,Upload,我想使用JavaScript按钮上传一个带有selenium的文件 HTML代码: <div class="option optionFile"> <label class="editionFieldMandatory" for="file">File</label> <input id="file_input" class="file" width="120" type="file" height="30" name="file_input" styl

我想使用JavaScript按钮上传一个带有selenium的文件

HTML代码:

<div class="option optionFile">
<label class="editionFieldMandatory" for="file">File</label>
<input id="file_input" class="file" width="120" type="file" height="30" name="file_input" style="display: none;">
<object id="file_inputUploader" width="120" height="30" type="application/x-shockwave-flash" data="/scripts/external_api/uploadify.swf" style="visibility: visible;">
<param name="quality" value="high">
<param name="wmode" value="transparent">
<param name="allowScriptAccess" value="sameDomain">
<param name="flashvars" value="uploadifyID=file_input&pagepath=/content/&buttonText=Browse&script=/utils/upload_library.php?session_name=j2cnrk8ehssuhhi78gq2pdqoa1&folder=/var/www/BO/IHM/resources/documents/help_manuals&width=120&height=30&wmode=transparent&method=POST&queueSizeLimit=999&simUploadLimit=1&hideButton=true&fileDesc=Documents&fileExt=*.aac; *.aif; *.aiff; *.avi; *.bmp; *.conf; *.csv; *.doc; *.docx; *.dot; *.dotm; *.dotx; *.exe; *.flac; *.gif; *.htm; *.html; *.jpeg; *.jpg; *.log; *.lpcm; *.m2t; *.m2ts; *.mhtml; *.mid; *.mka; *.mkv; *.mov; *.mp3; *.mp4; *.mpeg; *.mpg; *.msi; *.ogg; *.pcm; *.pdf; *.png; *.pot; *.pps; *.ppt; *.pub; *.rar; *.tgz; *.tp; *.ts; *.txt; *.vdx; *.vob; *.vsd; *.vss; *.vst; *.vsx; *.vtx; *.wav; *.wma; *.wmv9; *.xls; *.xlsb; *.xlsm; *.xlsx; *.xml; *.zip&auto=true&sizeLimit=15728640&fileDataName=Filedata">
</object>
<div id="file_inputQueue" class="uploadifyQueue"></div>
</div>
</div>

谢谢您的帮助。

问题是您对
type=“file”
的输入附带了
显示:无
样式。如果您删除它,selenium应该能够与之交互。

它与JAVA完美配合。所以你可以试试JS

首先确保输入元素是可见的

不要点击浏览按钮,它将触发一个操作系统级对话框,并有效地停止您的测试

相反,您可以使用:

driver.findelelement(By.id(“myUploadElement”).sendKeys(“”)

myUploadElement是该元素的id(本例中为按钮),在sendKeys中,您必须指定要上载的内容(图像、视频等)的绝对路径。硒将为你做剩下的


请记住,只有当您发送的文件元素的格式为

时,上传才会起作用。谢谢。我无法更改我使用的软件marked@JulienP. , 如果用户不能与该特定元素交互,Selenium也不能。这是一种黑客行为,但您可以在尝试向该元素发送击键之前使用以下方法将该元素设置为可见:
((JavascriptExecutor)driver).executeScript(“document.getElementById('file_input').setAttribute('Style','display:block');”,“”)
@Arran:看起来用户没有直接与
type=“file”
的输入交互-我猜UI在flash对象中,所以脚本应该严格地尝试与之交互。@vincebowdren您的语句不正确。他试图运行的测试指定元素由xpath
//input[@id='file\u input']
标识,该元素显然在html文档中,而不是flash中。谢谢。我尝试了driver.findElement(By.id(“文件输入”)).sendKeys(“C:\test”);但是它不工作。我想测试这个脚本,但它不工作((JavascriptExecutor)driver)。executeScript(“document.getElementById('file_输入‌​').setAttribute('Style','display:block');“,”);driver.findElement(By.id(“文件输入”)).sendKeys(“C:\test”);FF 13和selenium 2.0只需将路径用作C:\\test\\。扩展名,而不是使用“C:\test”
WebElement elem = driver.findElement(By.xpath("//input[@id='file_input']"));
            elem.sendKeys("C:\test");