右键单击在selenium web驱动程序中不起作用

右键单击在selenium web驱动程序中不起作用,selenium,webdriver,Selenium,Webdriver,我想右击一个链接,然后选择上下文菜单中的第一个选项 我试过以下五种方法,但都不管用。所有方法都在单击 链接以正常方式进行,但不会发生上下文单击 谁能解释一下这是怎么回事 我使用的环境是…selenium-3.4.0、FF 53和Windows 7 package WebDriverAdvancedPrograms; import java.awt.AWTException; import java.awt.Robot; impo

我想右击一个链接,然后选择上下文菜单中的第一个选项

我试过以下五种方法,但都不管用。所有方法都在单击 链接以正常方式进行,但不会发生上下文单击

谁能解释一下这是怎么回事

我使用的环境是…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,y从getLocation方法获取与浏览器相关,但robot类与屏幕相关

这里我的问题是如何获得和屏幕相关的元素的精确位置

谢谢 拉维M

请试一试

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();
使用以下命令:

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

您可以将robot classi与robot类一起使用。正在进行上下文单击,但未在元素上进行。你能看到上面代码中的方法6和方法7吗。让我创建一个完整的工作示例,并从我的GitHub分享。@RaviMakam我已经在我的机器上尝试了相同的解决方案,并且工作正常。我已经在GitHub中上传了示例代码。请尝试下载并检查-。我的代码示例是C语言的,但在Java中也一样。谢谢更新。但我想你在chrome中尝试过。我只想更新你2件东西。1.在chrome中单击上下文…但它没有从中选择选项。。。。随着时间的推移,忘记的页面将显示在同一页面中,而不是显示在新选项卡中。2.我发布的问题是针对firefox的。我从下面的链接了解到…这是ff中存在的问题。他们在ff 56版本中修复了它。当页面加载到同一页面中时,它执行正常的左键单击而不是上下文单击。。