【问题标题】:Selenium right click scrolling down before selecting optionsSelenium 在选择选项之前右键单击向下滚动
【发布时间】:2016-06-07 13:54:52
【问题描述】:

我已经看到这个线程here,当我尝试使用sendKeys(Keys.ARROW_DOWN) 而不是向下移动上下文菜单时,页面会非常快速地向下滚动。我怎样才能避免这种情况?我不确定如何等待上下文菜单出现,尽管我可以等待元素出现。

函数如下:

    public static void rightClickCopyImageLink(WebElement image){
    Actions copying = new Actions(driver);

    copying.contextClick(image).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).
    sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).
    sendKeys(Keys.RETURN).build().perform();

}

【问题讨论】:

  • 你能和我们分享你的代码吗?
  • 当然,只是学习 selenium 的代码不是很复杂
  • 嗯,很抱歉,我没有看到您的代码有任何问题,也无法重现它。
  • 无赖。真的很奇怪,我到处看都没有人有这个问题,但我的代码和他们的完全一样。我可以通过右键单击并同时按下向下箭头在浏览器中重现相同的行为,但除了演示问题之外,这并没有真正的帮助。
  • 尝试将 selenium 更新到最新版本..

标签: java selenium selenium-chromedriver


【解决方案1】:

尝试将 contextClick 与其他操作分开使用。

copying.contextClick(image).build().perform();
copying.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).
sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).
sendKeys(Keys.RETURN).build().perform();

如果您愿意,您可以添加等到执行 contextClick 操作后出现上下文菜单。

【讨论】:

  • 感谢您的回复,这是我尝试的第一件事。然而,做同样的事情。
  • 我会等待,看看是否有效。关于最干净的方法的提示?除了时间,还有什么可以让它等待的吗?
  • 那么控件不在上下文菜单中。如果在上下文单击后按向下箭头,请手动尝试应用程序的行为方式。如果它按预期工作,那么您应该等到出现上下文菜单并获取控件或如何使上下文菜单获取控件。
  • 这取决于亚历克斯。如果上下文菜单有任何属性,如 id、name 等,您可以获取该对象并等待它显示。我不喜欢使用线程。但在最坏的情况下,您可以使用它。但首先尝试使用 Thread 并查看它是否正常工作。
  • 如果我手动操作,只要我没有在右键单击按钮后立即按下向下箭头,它就可以正常工作。
【解决方案2】:

首先要确定图片元素的位置是正确的……

我假设右键单击会出现一些子菜单,请使用单独的动作链进行右键单击。 然后等待元素出现。

一旦它出现,只需移动到元素并按向下箭头。

骨架代码可能是:

public static void rightClickCopyImageLink(WebElement image){
        Actions rightClick= new Actions(driver);
        rightClick.contextClick(image).build().perform();
        //Wait for submenu to appear waituntil(submenu to be located)
        //Move to located submenu <this is important>

        Actions MoveDownSubmenu = new Actions(driver);
    MoveToRightClickSubmenu.sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).build().perform();


    }

【讨论】:

  • 我已经尝试过在两个操作之间进行拆分的实现,也不起作用。不过谢谢你的想法。还有其他想法吗?
  • 这不是问题。我现在已经找到了——这是 chrome 网络驱动程序的问题....bugs.chromium.org/p/chromedriver/issues/detail?id=1003
  • 如果您的问题仍未解决,请尝试使用 AWT Robot 按键事件,它肯定会起作用,但我不推荐它,因为它们是本机事件......使用按键和释放事件一次你移动到子菜单..
  • 问题是 chrome 驱动程序不允许您移动到子菜单。它会打开它,但无论您做什么(包括单击、按 Escape 等),您仍然无法进入子菜单。这是一个 chromedriver 错误
  • 是的,我明白你在说什么,但我指出的事件不是 webdriver 事件,它是一个本地事件(有点像你的操作系统生成的)它与 Selenium 无关。就像 Web 驱动程序运行时手动按键一样。docs.oracle.com/javase/7/docs/api/java/awt/event/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多