【发布时间】: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