为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容708150 2021-12-01 16:11:31
我正在自动化一个页面,我想右键单击一个元素,然后单击“将链接另存为...。我可以右键单击该元素,但无法选择任何选项。下面是我编写的代码,但它实际上不是选择一个选项,而是点击该元素。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>
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

如果您的目的是从网页上下载图片,您可以直接下载带有 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();


查看完整回答
反对 回复 2021-12-01
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

尝试使用Robot对象解决它:


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);


查看完整回答
反对 回复 2021-12-01
?
冉冉说

TA贡献1877条经验 获得超1个赞

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

根据您想要的问题contextClick(element)Save link as通过操作进行选择。

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

根据Chromedriver 不会将键发送到上下文菜单

  • contextClick(element)进入渲染器进程

  • 这是ChromeDriver模拟按键方式的限制。

  • 可以称为ChromeDriver 架构错误限制,我们必须等到问题得到解决。


查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信