【问题标题】:Right click is not working in selenium web driver右键单击在硒网络驱动程序中不起作用
【发布时间】:2018-03-04 17:10:46
【问题描述】:

我想右键单击一个链接并在上下文菜单中选择第一个选项。

我尝试了以下五种方法,但没有任何效果。所有方法都在点击 以正常方式链接,但没有发生上下文点击。

有人能解释一下这是怎么回事吗?

我使用的环境是...selenium-3.4.0, FF 53, Windows 7

        package WebDriverAdvancedPrograms;


        import java.awt.AWTException;
        import java.awt.Robot;
        import java.awt.event.KeyEvent;
        import java.util.concurrent.TimeUnit;

        import org.openqa.selenium.*;
        import org.openqa.selenium.firefox.FirefoxDriver;
        import org.openqa.selenium.interactions.Action;
        import org.openqa.selenium.interactions.Actions;

        public class RightClick {

            public static void main(String[] args) throws InterruptedException, AWTException {
                System.setProperty("webdriver.gecko.driver", "G:\\Selenium\\geckodriver-v0.16.0-win64\\geckodriver.exe");
                WebDriver driver = new FirefoxDriver();
                driver.get("http://facebook.com");
                driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

                WebElement element=driver.findElement(By.linkText("Forgotten account?"));


    //      // Method 1 - NOT WORKING
    //      Actions builder = new Actions(driver);
    //      Action mouseOverHome = builder
    //              .moveToElement(element)
    //              .contextClick(element)
    //              .sendKeys(Keys.DOWN)
    //              .sendKeys(Keys.ENTER)
    //              .build();
    //      mouseOverHome.perform();

    // Method 2 - NOT WORKING
    //      Actions builder = new Actions(driver);
    //      Action mouseOverHome = builder
    //              .moveToElement(element)
    //              .contextClick(element)
    //              .sendKeys(Keys.ARROW_DOWN)
    //              .sendKeys(Keys.RETURN)
    //              .build();
    //      mouseOverHome.perform();

    // Method 3 - NOT WORKING
    //      Actions builder = new Actions(driver);
    //      Action mouseOverHome = builder
    //              .contextClick(element)
    //              .sendKeys(Keys.ARROW_DOWN)
    //              .sendKeys(Keys.RETURN)
    //              .build();
    //      mouseOverHome.perform();

    // Method 4 - NOT WORKING
    //      Actions builder = new Actions(driver);
    //      Action mouseOverHome = builder
    //              .contextClick(element)
    //              .sendKeys(Keys.ARROW_DOWN)
    //              .sendKeys(Keys.ARROW_UP)
    //              .sendKeys(Keys.RETURN)
    //              .build();
    //      mouseOverHome.perform();


    //      // Method 5 - NOT WORKING
            Actions action= new Actions(driver);
            action.contextClick(element).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.RETURN).build().perform();



   // Method 6 - Partially WORKING
    Point p = element.getLocation();
    int x = p.getX();
    int y = p.getY();

    Robot r=new Robot();
    r.mouseMove(x, y);
    r.mousePress(InputEvent.BUTTON3_MASK);
    r.mouseRelease(InputEvent.BUTTON3_MASK);
    r.keyPress(KeyEvent.VK_DOWN);
    r.keyRelease(KeyEvent.VK_DOWN);

    r.keyPress(KeyEvent.VK_ENTER);
    r.keyRelease(KeyEvent.VK_ENTER);

   //Method 7 - WORKING
    Robot r=new Robot();
    r.mouseMove(1000, 145);
    r.mousePress(InputEvent.BUTTON3_MASK);
    r.mouseRelease(InputEvent.BUTTON3_MASK);
    r.keyPress(KeyEvent.VK_DOWN);
    r.keyRelease(KeyEvent.VK_DOWN);

    r.keyPress(KeyEvent.VK_ENTER);
    r.keyRelease(KeyEvent.VK_ENTER);


        }
    }

方法 6 部分有效意味着...上下文点击发生在屏幕上,但不在元素上。

在方法 7 中,我手动输入了 x,y 位置它的工作...

方法6不起作用的原因是x,从getLocation方法获取的y与浏览器有关,但机器人类与屏幕有关..

我的问题是如何获取与屏幕相关的元素的确切位置

谢谢 拉维M

【问题讨论】:

  • 你可以使用机器人类
  • 我尝试使用机器人类..上下文点击正在发生但不是在元素上。你能看到上面代码中的方法6和方法7吗..

标签: selenium webdriver


【解决方案1】:

请尝试,

Actions builder = new Actions(driver);
builder.ContextClick(element).Build().Perform();

或者请尝试将 RETURN 更改为 ENTER,如下所示,

Actions action= new Actions(driver);
action.contextClick(element).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();

【讨论】:

  • 好的。让我创建一个完整的工作示例,并将其从我的 GitHub 分享。
  • @RaviMakam 我已经在我的机器上尝试了相同的解决方案并且工作正常。我已经在 GitHub 上上传了示例代码。请尝试下载并检查 - github.com/vnathv/seleniummouserightclick.git 。我的代码示例在 C# 中,但在 Java 中也是一样的。
  • 感谢更新..但我想你尝试过 chrome..我只想更新你 2 件事。 1.context点击发生在chrome中..但它没有从中选择选项....因为忘记的页面显示在同一页面而不是新标签中。 2.我发布的问题是针对firefox的。我从下面的链接得知……这是 ff 中的一个现有问题。他们在 ff 56 版本中修复了它。 github.com/mozilla/geckodriver/issues/660
【解决方案2】:

使用这个:

Actions right_action = new Actions(chromeDriver);  
right_action.ContextClick(element_name).SendKeys(Keys.ArrowDown).SendKeys(Keys.Enter).Build().Perform();

【讨论】:

  • 当页面加载到同一页面时,它会进行正常的左键单击而不是上下文单击..
猜你喜欢
  • 2018-08-27
  • 2013-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多