所以从我发现的东西开始,我先做一个
Actions action = new Actions(driver);
scrollToElement(href);
action.contextClick(href).perform()
会弹出菜单。但后来我做到了
action.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).build().perform();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
action.sendKeys(Keys.RETURN).build().perform();
但是,这似乎使上下文菜单外的箭头向下。 这是一个PDF链接,因此,它没有选择“将链接另存为”,而是单击了上下文菜单的OUTSIDE向下箭头,因此关闭了上下文菜单,只需在pdf href上单击鼠标左键。
所以我想知道它是否仍在上下文框中使箭头向下移动。还是有一个“将链接另存为...”的xpath?我无法对其进行检查。我想,我可以尝试
//*[contains(text(), 'Save link as"')]
但不确定是否可以正常工作?有人遇到过这种情况吗?
答案 0 :(得分:0)
您正在寻找错误的方向,不应在不测试应用程序,测试浏览器的情况下自动执行文件下载,我希望这不是您应该做的事情。
此外,当您在Selenium Grid或parallel mode本地运行测试时,您将遇到问题,因为当前未关注的浏览器会将关键事件发送到位于焦点。
最好的选择是提取链接href的属性值,并使用OkHttp之下的Selenium Java Client库执行下载。相关代码如下:
OkHttpClient client = new OkHttpClient().newBuilder().build();
Request request = new Request.Builder().url(href.getAttribute("href")).build();
Response response = client.newCall(request).execute();
File downloadedLogo = new File("myfile.pdf");
BufferedSink sink = Okio.buffer(Okio.sink(downloadedLogo));
sink.writeAll(Objects.requireNonNull(response.body()).source());
sink.close();