在Selenium Webdriver – Java中的右键菜单中select一个选项

我使用seleniumwebdriver。 我无法从右键打开的选项中select(如第二个)选项。

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

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

所以这个代码我可以右键点击,但右键菜单自动消失。 我想从右键菜单中select说第二个选项。

请帮忙!!!

要从上下文菜单中select项目,您只需使用如下所示的按下事件即可移动鼠标位置: –

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

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

这是更好的方法和成功:

 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(); 

我们将采取WebDriver操作类的帮助,并执行右键单击。 以下是语法:

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

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

  1. 识别元素
  2. 等待元素的存在
  3. 现在执行上下文点击
  4. 之后,我们需要select所需的链接。

包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(); } } 

在上下文点击()之后,你可能不得不把鼠标移动到任何特定的位置 –

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

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

我希望这个工程。 你将不得不计算xy的偏移值;

最好的办法是find右键单击每个选项button的大小,然后如果你点击第二个选项。

x = 选项button的宽度 / 2

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

*使用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);* 

这里是右键单击webelement的代码。

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

这是我可以点击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(); 

希望这可以帮助

使用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);