无法使用运行 java 的 selenium/web 驱动程序上传文件

软件测试 网络驱动程序 爪哇
2022-01-30 16:20:24

我有一个复杂的界面,上传文件是三个步骤(论坛不允许我添加窗口的屏幕截图,所以请尝试可视化它)第 1 步单击浏览选项卡并选择要上传的文件(这将创建进度条) 第 2 步单击开始上传按钮 第 3 步单击完成按钮 关于页面上元素的萤火虫信息已粘贴在页面底部。我的浏览按钮的 ID 是 fileInputUploader

我用来尝试上传文件的代码是(在我的测试类中)

WebElement upload = driver.findElement(By.id("fileInputUploader"));
upload.sendKeys("C:/Users/Deepankur/Desktop/Deepankur Folder/selenium Test Cases/test12.jpg");

但它什么也没做

我在第 2 步中看不到上传进度动画,所以我可以点击开始上传并完成它。任何帮助都感激不尽。

这是我页面这一部分的 html

<div style="padding: 20px; border: 2px solid #ccc; margin: 12px 0 0 0; width: 100%;" id="multiUploader">
 <input width="110" type="file" height="30" id="fileInput" name="fileInput" style="display: none;"><object width="110" height="30" type="application/x-shockwave-flash" data="/core/webcore/swf/uploadify.swf" id="fileInputUploader" style="visibility: visible;"><param name="quality" value="high"><param name="wmode" value="opaque"><param name="allowScriptAccess" value="always"><param name="flashvars" value="uploadifyID=fileInput&amp;pagepath=/core/root/&amp;script=/core/application/pApproval/uploadify.cfm&amp;folder=//192.168.100.51/client_data/CPM_ConcretePlatform_DEV/userUploads&amp;scriptData=project_id%3D19%26client_id%3D2172%26project_file_type%3D2%26file_zone_id%3D104%26file_zone_group_id%3D17%26parent_project_file_id%3D0%26approval_rule_id%3D10%26job_id%3D519%26status_id%3D17&amp;width=110&amp;height=30&amp;wmode=opaque&amp;method=POST&amp;queueSizeLimit=20&amp;simUploadLimit=1&amp;fileDesc=Please see the list of allowed file extensions under More Help Uploading&amp;fileExt=*.jpg;*.tif;*.pdf;*.qxd;*.eps;*.psd;*.zip;*.doc;*.ppt;*.xls;*.pdf;*.mov;*.ai;*.png;*.bmp;*.ait;*.dwg;*.dxf;*.flv;*.indd;*.txt;*.inx;*.gif;*.cad;*.docx;*.xlsx;*.pptx;*.mpp;*.m2v;*.avi;*.vob;*.mpg;*.wmv;*.mp4;*.m4v;*.misc;*.ppsx&amp;multi=true&amp;sizeLimit=26214400&amp;fileDataName=Filedata"></object><div class="uploadifyQueue" id="fileInputQueue"></div>
 <br>
 <br>
 <a class="uploadButton" href="javascript:$('#fileInput').uploadifyUpload(); uploadStartFinishButton();">Start Upload</a> 
</div>
4个回答

在我看来,尝试自动化浏览器本机文件上传对话框并不是一个好的编码实践(就编写 Selenium 测试而言)。人们正在这样做,这当然是可能的,但它速度较慢且效率低下,并且在您正在自动化的 Web 浏览器的发布者已经彻底测试过的领域中并不能证明任何重要的事情。

相反,对于 Web 应用程序中的每个文件上传操作,都应该有一个远程 URL,该文件上传控件将发布到该 URL。作为 Selenium 测试编写者,您的开发人员应该允许您直接访问该 URL 并使用 Apache HttpUtils 通过直接上传来发布文件。

尝试使用 FileUrl 调用 sendKeys 方法。

File file=new File("C:/SomeFolder/a.jpg");
URL url=file.toURL();

我有一个类似的问题,并通过 FileUrl 让它工作,但它是在 C# 中。希望以上内容适用于Java。

您的文件上传控件是在 Flash 中实现的;Webdriver 没有任何与 Flash 对象交互的内置方式,这就是您的 TypeKeys 不起作用的原因。

您可以考虑使用各种附加组件来自动化 flash 对象,例如 Sikuli。

考虑混合您的测试框架以同时使用 codedui 和 selenium webdriver 组件。CodedUI 在大多数窗口中都能很好地自动化。Selenium WebDriver 自动化适用于大多数浏览器,除了 Windows 8.1 上的 IE11。在 Windows 8.1 中,IE 11 不会将会话 ID 委托给 selenium WebDriver。