【问题标题】:How to save file by Selenium from download pop-up box?如何通过 Selenium 从下载弹出框中保存文件?
【发布时间】:2015-05-27 09:29:23
【问题描述】:

我进行了大量的谷歌搜索,Selenium 似乎本身并不支持在弹出框中单击“保存”按钮。但是我看到了一个解决方法,可以在这个问题中设置浏览器首选项——Access to file download dialog in Firefox

那里给出的代码如下--

FirefoxProfile firefoxProfile = new FirefoxProfile();

firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","c:\\downloads");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

WebDriver driver = new FirefoxDriver(firefoxProfile);//new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

driver.navigate().to("http://www.myfile.com/hey.csv");

很遗憾,我无法导航到如下行所示的文件位置,因为它会将我重定向到网站的登录页面。

 driver.navigate().to("http://www.myfile.com/hey.csv")

我已经登录网站,再次登录没有意义。即使这样,我也必须打开一个新的窗口处理程序并切换到新窗口(我认为它无论如何都不会起作用,因为登录后它会指向发生弹出窗口的上一个页面)。是否有一些解决方法可以避免这种情况

driver.navigate().to

然后以某种方式点击弹出对话框上的保存按钮?

注意1:当我手动打开浏览器时,弹出窗口根本没有出现。即使我没有手动更改 Firefox 首选项以自动下载文件,当我单击上一个链接时,文件也会开始下载。

注意2:我手动更改了 Firefox 首选项以自动下载文件类型(在我的情况下为 XML),但 Selenium 没有选择此首选项(预期行为,我猜)。

【问题讨论】:

  • 您是否尝试过使用 selenium 的默认配置文件?在这种情况下,应该没有弹出窗口。对于测试,从您的代码中删除那些 FirefoxProfilelines 并使用命令行参数运行 Selenium:-Dwebdriver.firefox.profile=[name of your profile]
  • 之前试过。它不起作用。
  • 好的。解决了。我不需要 driver.navigate() ...文件的 MIME 类型不正确。从这里找到文件的正确 mime 类型 -- watirmelon.com/2011/09/07/…
  • Selenium 有 br.cookies 或使用执行“return document.cookie”并转换为字符串。 Apache Http 组件有 CloseableHttpComponent。使用客户端下载文件。您可以使用 new URL(br.url()).getHost 从 selenium 获取主机,并根据客户端的需要在标头中指定用户代理和 cookie。然后只需获取字节并提交到文件夹。您甚至可以对某些文件进行一些验证。查看我的项目github.com/asevans48/GoatGrazerSelenium
  • 另外,phantomjs 工作

标签: java scala firefox selenium


【解决方案1】:

简单地说,不可能与不属于 DOM 的任何东西进行交互。你不能让 Selenium 点击浏览器的“保存”按钮。

在大多数情况下,无论如何下载文件都不是一个好主意(至少在您进行 UI 测试时不是这样)。

根据您想要对文件执行的具体操作,我建议您寻找另一种方法来测试该行为。

【讨论】:

  • 嗯,我没有测试任何东西。我正在使用 selenium 登录到一个站点,因为我无法通过其他方式登录到该站点。我需要下载文件,解析 XML 文件中的数据并存储在数据库中。下载很重要。
  • 如果这就是你所做的一切,那么你应该考虑使用 URLConnections 和 HttpUrlConnections 来登录和下载东西。它会比 Selenium 快得多,而且你实际上可以下载东西并用它们做事。在this question中查看更多信息
  • 其实我试过那个方法,但是Page好像不接受通过HttpUrlConnections的登录。我可以通过 HttpUrlConnections 登录其他网站,但不能登录亚马逊。 Selenium 运行良好,可以登录,导航到所需页面,但在下载部分被阻止。
猜你喜欢
  • 2014-09-11
  • 2015-10-02
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多