如何右键单击元素并在硒的chrome浏览器中选择一个选项



我正在自动化一个页面,我想右键单击一个元素,然后单击"将链接另存为..."。我可以右键单击该元素,但无法选择任何选项。下面是我编写的代码,但它实际上不是选择一个选项,而是单击该元素。

WebElement elementq =driver.findElement(By.xpath("//a[contains(text(),'fedev.docs-gmail.JPG')][@class]"));
Actions builderq = new Actions(driver);
builderq.contextClick(elementq).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER);
builderq.build().perform();

以下是 HTML:

<p><a class="icon icon-attachment" href="/attachments/download/15535/fedev.docs-gmail.JPG">fedev.docs-gmail.JPG</a>  
<span class="size">(100 KB)</span>
<a data-confirm="Are you sure?" class="delete" title="Delete" rel="nofollow" data-method="delete" href="/attachments/15535"><img src="/images/delete.png" alt="Delete"></a>
<span class="author">Asim Sarfraz, 25 September 2018 08:24 AM</span>
</p>

如果您的目标是从网页下载图像,而不是右键单击,您可以直接下载带有 url 的图像。

WebElement elementq =driver.findElement(By.xpath("//a[contains(text(),'fedev.docs-gmail.JPG')][@class]"));
String imageLink = logo.getAttribute("href");
String fileName = url.getFile();
URL imageURL = new URL(imageLink);
InputStream in = new BufferedInputStream(imageURL.openStream());
OutputStream out = new BufferedOutputStream(new FileOutputStream(fileName));
for ( int i; (i = in.read()) != -1; ) {
out.write(i);
}
in.close();
out.close();

尝试使用机器人对象来解决它:

Actions builderq = new Actions(driver);
builderq.contextClick(elementq);
builderq.build().perform();
Robot robot = new Robot();
int REPEATS_OF_VK_DOWN_INPUT = 3;
for (int i = 0; i < REPEATS_OF_VK_DOWN_INPUT; i++) {
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_DOWN);
Thread.sleep(500);
}
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
Thread.sleep(1000);

评论太大了,所以作为答案发布。

根据您的问题,您想通过操作contextClick(element)并选择Save link as

值得一提的是,如果上下文菜单列表已实现为本机上下文菜单列表,我们可以很容易地解决这个问题。但是根据您共享的 HTML,上下文菜单列表似乎是Chrome 浏览器的本机上下文菜单列表

根据Chromedriver不会将密钥发送到上下文菜单:

  • contextClick(element)进入渲染器进程
  • 这是ChromeDriver模拟按键方式的限制。
  • 可以称为ChromeDriver架构的错误限制,我们必须等到问题得到解决。

相关内容

最新更新