右键单击上下文,将链接另存为

时间:2019-06-24 17:58:38

标签: java selenium contextmenu

使用Java和Selenium,我试图获取此链接: enter image description here

所以从我发现的东西开始,我先做一个

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"')]

但不确定是否可以正常工作?有人遇到过这种情况吗?

1 个答案:

答案 0 :(得分:0)

您正在寻找错误的方向,不应在不测试应用程序,测试浏览器的情况下自动执行文件下载,我希望这不是您应该做的事情。

此外,当您在Selenium Gridparallel 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();