我正在使用Selenium webdriver。我无法从右键单击打开的选项中选择(比如说第二个)选项。
在我当前的代码中,我可以右键单击webElement但无法从右键单击后打开的列表中选择一个选项,因为它会自动消失。
Actions action= new Actions(driver);
action.contextClick(productLink).build().perform();
因此,使用此代码,我可以右键单击,但右键单击菜单会自动消失。我想从右键菜单中选择说第二个选项。
请帮助!!!
答案 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();
以下是我们在示例中遵循的步骤:
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;