San*_*ngh 30 selenium selenium-webdriver
我必须使用下面给出的Selenium Webdriver执行以下任务.
任何人都可以共享,我们如何使用Java实现这一点?
Dir*_*irk 24
您将无法访问保存对话框.这是由操作系统控制的.您真正能够做的唯一事情是设置浏览器的默认下载位置,并允许它自动下载文件.然后用Java检查文件.
您应该从之前的SO问题中查看此答案.基本上,在设置Firefox配置文件时,您可以添加一个调用,将该属性设置为以逗号分隔的MIME类型列表,以便始终下载:browser.helperApps.neverAsk.saveToDisk
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");
Run Code Online (Sandbox Code Playgroud)
请参阅关于:configs的Mozilla KB FAQ文章.
更新 看起来这可能现在可以在另一个问题中看到这个答案
Abe*_*lgo 10
取消/保存对话框弹出窗口可能正在显示,因为该站点正在向您发送不同的MIME类型.
检查实际的标题内容.
使用开发人员工具内置的firefox,右键单击以检查发布的元素/下载链接,然后查看网络监视器以查看返回的ContentType标头值.这将是您要使用的那个..
相应地设置配置文件设置
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/octet-stream,text/csv");
Run Code Online (Sandbox Code Playgroud)
我期待"text/csv"然而得到"application/octet-stream"一旦添加到接受的类型列表中它都按预期工作,没有弹出窗口
一种可能的解决方案是通过 Selenium 获取文件的 URL,创建(非 Selenium)连接,将 Selenium 的 cookie 复制到该连接(如有必要),然后下载文件。大多数语言都有用于执行 HTTP 请求的 API(或库)。例如,要在 Java 中完成此操作,您可以使用URL.openConnection():
String link = linkElement.getAttribute("href");
URL url = new URL(link);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
Run Code Online (Sandbox Code Playgroud)
您可能需要复制 Selenium 拥有的 cookie 以模仿 Selenium 用户(例如,如果您正在测试需要登录的网站)。
Set<Cookie> cookies = webDriver.manager().getCookies();
String cookieString = "";
for (Cookie cookie : cookies) {
cookieString += cookie.getName() + "=" + cookie.getValue() + ";";
}
httpURLConnection.addRequestProperty("Cookie", cookieString);
Run Code Online (Sandbox Code Playgroud)
然后您可以使用HttpURLConnection.getInputStream()将文件内容写入您的首选位置。
try (InputStream in = httpURLConnection.getInputStream()) {
Files.copy(in, new File("/path/to/file.ext").toPath(),
StandardCopyOption.REPLACE_EXISTING);
}
Run Code Online (Sandbox Code Playgroud)
虽然这种方法对于不同的编程语言会有所不同,但它对所有浏览器都是一样的。
| 归档时间: |
|
| 查看次数: |
69223 次 |
| 最近记录: |