【问题标题】:How to upload file with selenium in java [duplicate]如何在java中使用selenium上传文件[重复]
【发布时间】:2013-05-29 15:13:18
【问题描述】:

我想使用 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>

我有一个测试,但它失败了:

WebElement elem = driver.findElement(By.xpath("//input[@id='file_input']"));
            elem.sendKeys("C:\test");

坦克为您提供帮助。

【问题讨论】:

    标签: java selenium upload


    【解决方案1】:

    问题在于您对type="file" 的输入附加了display:none 样式。如果你删除它,selenium 应该能够与之交互。

    【讨论】:

    • 谢谢。我使用我标记的软件无法更改
    • @JulienP。 ,如果用户不能与该特定元素交互,Selenium 也不能。
    • 这是一个 hack,但您可以在尝试向其发送击键之前使用以下命令设置元素可见:((JavascriptExecutor)driver).executeScript("document.getElementById('file_input').setAttribute('Style','display:block');","");
    • @Arran:看起来用户没有直接与type="file" 的输入进行交互 - 我猜 UI 是在 flash 对象中,所以这就是脚本应该严格尝试与之交互的内容.
    • @vincebowdren 您的陈述不正确。他试图运行的测试将元素指定为由 xpath //input[@id='file_input'] 标识,这显然在 html 文档中,而不是 flash。
    【解决方案2】:

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

    首先确保输入元素可见

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

    您可以使用:

    driver.findElement(By.id("myUploadElement")).sendKeys("&lt;absolutePathToMyFile&gt;");

    myUploadElement 是该元素的 id(本例中为按钮),在 sendKeys 中您必须指定要上传的内容的绝对路径(图片、视频等)。 Selenium 将为您完成剩下的工作。

    请记住,只有如果您发送文件的元素应采用&lt;input type="file"&gt;

    格式,上传才有效

    【讨论】:

    • 谢谢。我试过 driver.findElement(By.id("file_input")).sendKeys("C:\test");但它不起作用。
    • 我想测试这个脚本,但它不工作 ((JavascriptExecutor)driver).executeScript("document.getElementById('file_input‌​').setAttribute('Style','display:block') ;",""); driver.findElement(By.id("file_input")).sendKeys("C:\test");
    • FF 13 我有硒 2.0
    • 只使用路径作为 C:\\test\\.extension 而不是使用 "C:\test"跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多