从Selenium Webdriver - Java中的右键菜单中选择一个选项

时间:2012-07-11 07:53:35

标签: java selenium-webdriver

我正在使用Selenium webdriver。我无法从右键单击打开的选项中选择(比如说第二个)选项。

在我当前的代码中,我可以右键单击webElement但无法从右键单击后打开的列表中选择一个选项,因为它会自动消失。

Actions action= new Actions(driver);
action.contextClick(productLink).build().perform();

因此,使用此代码,我可以右键单击,但右键单击菜单会自动消失。我想从右键菜单中选择说第二个选项。

请帮助!!!

12 个答案:

答案 0 :(得分:30)

要从上下文菜单中选择项目,您只需使用按键向下事件移动鼠标位置,如下所示: -

Actions action= new Actions(driver);
action.contextClick(productLink).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.RETURN).build().perform();

希望这对你有用。 祝你有美好的一天:)

答案 1 :(得分:6)

这是更好的方法,并取得了成功:

Actions oAction = new Actions(driver);
oAction.moveToElement(Webelement);
oAction.contextClick(Webelement).build().perform();  /* this will perform right click */
WebElement elementOpen = driver.findElement(By.linkText("Open")); /*This will select menu after right click */

elementOpen.click();

答案 2 :(得分:6)

*使用Robot类可以执行此操作,请尝试以下代码:

Actions action = new Actions(driver);
action.contextClick(WebElement).build().perform();
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_DOWN);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

答案 3 :(得分:4)

我们将借助WebDriver动作类并执行右键单击。以下是语法:

Actions action = new Actions(driver).contextClick(element);
action.build().perform();

以下是我们在示例中遵循的步骤:

  1. 识别元素
  2. 等待Element
  3. 的存在
  4. 现在执行上下文点击
  5. 之后我们需要选择所需的链接。
  6. package com.pack.rightclick;

        import org.openqa.selenium.Alert;
        import org.openqa.selenium.By;
        import org.openqa.selenium.NoSuchElementException;
        import org.openqa.selenium.StaleElementReferenceException;
        import org.openqa.selenium.WebDriver;
        import org.openqa.selenium.WebElement;
        import org.openqa.selenium.firefox.FirefoxDriver;
        import org.openqa.selenium.interactions.Actions;
        import org.openqa.selenium.support.ui.ExpectedConditions;
        import org.openqa.selenium.support.ui.WebDriverWait;
        import org.testng.Assert;
        import org.testng.annotations.AfterClass;
        import org.testng.annotations.BeforeClass;
        import org.testng.annotations.Test;
    
    public class RightClickExample {
    
        WebDriver driver;
    
        String URL = "http://medialize.github.io/jQuery-contextMenu/demo.html";
    
        @BeforeClass
        public void Setup() {
            driver = new FirefoxDriver();
            driver.manage().window().maximize();
        }
    
        @Test
        public void rightClickTest() {
            driver.navigate().to(URL);
            By locator = By.cssSelector(".context-menu-one.box");
            WebDriverWait wait = new WebDriverWait(driver, 5);
            wait.until(ExpectedConditions.presenceOfElementLocated(locator)); 
            WebElement element=driver.findElement(locator);
            rightClick(element);
            WebElement elementEdit =driver.findElement(By.cssSelector(".context-menu-item.icon.icon-edit>span"));
            elementEdit.click();
            Alert alert=driver.switchTo().alert();
            String textEdit = alert.getText();
            Assert.assertEquals(textEdit, "clicked: edit", "Failed to click on Edit link");
        }
    
        public void rightClick(WebElement element) {
            try {
                Actions action = new Actions(driver).contextClick(element);
                action.build().perform();
    
                System.out.println("Sucessfully Right clicked on the element");
            } catch (StaleElementReferenceException e) {
                System.out.println("Element is not attached to the page document "
                        + e.getStackTrace());
            } catch (NoSuchElementException e) {
                System.out.println("Element " + element + " was not found in DOM "
                        + e.getStackTrace());
            } catch (Exception e) {
                System.out.println("Element " + element + " was not clickable "
                        + e.getStackTrace());
            }
        }
    
        @AfterClass
        public void tearDown() {
            driver.quit();
        }
    
    
    }
    

答案 4 :(得分:1)

您可能需要在上下文单击()之后将鼠标移动到任何特定位置 -

Actions action = new Actions(driver);
actions.contextClick(link).moveByOffset(x,y).click().build().perform();

了解moveByOffset(x,y)的工作原理here;

我希望这有效。您必须计算 x y 的偏移值;

最好的方法是在右键单击后找到每个选项按钮的大小,然后单击第二个选项。

x = 选项按钮的宽度 / 2

y = 2 *(每个选项按钮的大小

答案 5 :(得分:0)

以下是右键单击webelement的代码。

Actions actions = new Actions(driver);    
Action action=actions.contextClick(WebElement).build(); //pass WebElement as an argument
            action.perform();

答案 6 :(得分:0)

这就是我点击Right click window中第四个元素的方法。

 Actions myAction = new Actions(driver); 
 myAction.contextClick(driver.findElement(By.xpath("//ul/li[1]/a/img"))).build().perform();
 myAction.sendKeys(Keys.ARROW_DOWN).build().perform();
 myAction.sendKeys(Keys.ARROW_DOWN).build().perform();
 myAction.sendKeys(Keys.ARROW_DOWN).build().perform();
 myAction.sendKeys(Keys.ARROW_DOWN).build().perform();
 myAction.sendKeys(Keys.ENTER).build().perform();

希望这有帮助

答案 7 :(得分:0)

也可以使用Java脚本执行器实现右键单击(在不支持动作类的情况下):

JavascriptExecutor js = (JavascriptExecutor) driver;

String javaScript = "var evt = document.createEvent('MouseEvents');"
                + "var RIGHT_CLICK_BUTTON_CODE = 2;"
                + "evt.initMouseEvent('contextmenu', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, RIGHT_CLICK_BUTTON_CODE, null);"
                + "arguments[0].dispatchEvent(evt)";

js.executeScript(javaScript, element);

答案 8 :(得分:0)

更好又简单的方法。

Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.cssSelector("a[href^='https://www.amazon.in/ap/signin']"))).contextClick().build().perform();

您可以在cssSelector处使用任何选择器。

答案 9 :(得分:0)

使用python webdriver右键单击操作

from selenium import webdriver

from selenium.webdriver import ActionChains

import time

driver = webdriver.Chrome()

driver.get("https://swisnl.github.io/jQuery-contextMenu/demo.html")
button=driver.find_element_by_xpath("//body[@class='wy-body-for-nav']")

action=ActionChains(driver)
action.context_click(button).perform()

答案 10 :(得分:0)

而不是尝试在鼠标上单击鼠标右键。使用键盘快捷键。双击元素->按住Shift,然后按F10。

Actions动作=新的Actions(驱动程序);

//按住左移并按F10
    action.MoveToElement(element).DoubleClick()。KeyDown(Keys.LeftShift).SendKeys(Keys.F10).KeyUp(Keys.LeftShift).Build()。Perform();

答案 11 :(得分:0)

with cte as 
(
select 
  (select ranking from table_one where table_two_id = tbl_2.id) as ranking,
  id
from table_two as tbl_2 
)
select *
from cte
order by ranking *1 desc;
相关问题