如何右键单击一个元素并在 selenium 的 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>


慕容708150
浏览 211回答 3
3回答

一只甜甜圈

如果您的目的是从网页上下载图片,您可以直接下载带有 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; ) {&nbsp; &nbsp; out.write(i);}in.close();out.close();

慕尼黑的夜晚无繁华

尝试使用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++) {&nbsp; &nbsp; robot.keyPress(KeyEvent.VK_DOWN);&nbsp; &nbsp; robot.keyRelease(KeyEvent.VK_DOWN);&nbsp; &nbsp; Thread.sleep(500);}robot.keyPress(KeyEvent.VK_ENTER);robot.keyRelease(KeyEvent.VK_ENTER);Thread.sleep(1000);

冉冉说

评论太大了,所以作为答案发布。根据您想要的问题contextClick(element)并Save link as通过操作进行选择。值得一提的是,如果上下文菜单列表已经实现为原生上下文菜单列表,我们可以很容易地解决这个问题。但根据您共享的 HTML,似乎context-menu-list是Chrome 浏览器的&nbsp;原生 context-menu-list。根据Chromedriver 不会将键发送到上下文菜单:contextClick(element)进入渲染器进程。这是ChromeDriver模拟按键方式的限制。可以称为ChromeDriver 架构的错误或限制,我们必须等到问题得到解决。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java