【问题标题】:download file stored Location and handling Download Popup using selenium webdriver with JAVA下载文件存储位置和处理使用带有 JAVA 的 selenium webdriver 下载弹出窗口
【发布时间】:2014-01-21 10:22:56
【问题描述】:
请提出以下几点实现的想法
1.如何使用Selenium Webdriver和JAVA处理IE中的Download popup?
2.如何使用JAVA将该xml文件存储在不同的位置?
注意:我们将传递'n'个输入,每个输入都有一个xml文件,需要所有的xml文件下载并保存在不同的位置
【问题讨论】:
标签:
java
selenium
download
【解决方案1】:
我建议您不要使用 selenium 自动下载文件。这是一个你不想落入的陷阱。文件下载在不同浏览器中的工作方式不同。人们会推荐使用 AutoIT,但它仅适用于 Windows,因此无法进行跨平台测试。由于您使用 Java 绑定,因此您可以使用 Robot 类将鼠标指针移动到窗口上的某个位置并发送原生点击。以我的经验,这个解决方案真的很不稳定。您不知道必须单击的确切位置,并且使用机器人您会盲目地单击事物。除此之外,当您使用 selenium 网格在远程机器上运行测试时,事情会变得更加困难。
那么如何下载文件呢?只需获取底层链接即可下载 DOM 中可用的文件并触发 GET 请求。如果要验证文件,请下载内容。如果您不想验证内容,只需响应代码即可。 Here 是一个很棒的博客,其中包含有关如何使用 http 请求在后台下载文件的 Java 示例,并详细解释了为什么使用 selenium 下载文件是一个坏主意。
【解决方案2】:
在初始化驱动程序对象之前尝试在您的 DesiredCapabilityObject 中设置以下首选项 -
File ffProfileFolder = new File("." + File.separator + "src" + File.separator
+ "test" + File.separator + "resources" + File.separator + "FFProfiles" + File.separator + "AutoUser" + File.separator);
File workspacePath = new File(".."+File.separator);
String workspaceCanPath = workspacePath.getCanonicalPath();
String downloadDir = workspaceCanPath+File.separator+"Downloads";
OSInteractions.createDir(downloadDir);
profileAutoUser.setPreference("browser.download.manager.showWhenStarting",false);
profileAutoUser.setPreference("browser.download.dir",downloadDir);
profileAutoUser.setPreference("browser.download.defaultFolder",downloadDir);
profileAutoUser.setPreference("browser.download.lastDir",downloadDir);
profileAutoUser.setPreference("browser.download.folderList",2);
profileAutoUser.setPreference("browser.download.useDownloadDir",true);
profileAutoUser.setPreference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream,application/msexcel");
DesiredCapabilities capFF = DesiredCapabilities.firefox();
capFF.setCapability(FirefoxDriver.PROFILE, profileAutoUser);
driver = new FirefoxDriver(profileAutoUser);
请注意,这仅适用于 FF。