Выберите опцию из меню правой кнопки мыши в Selenium Webdriver - Java
Я использую Selenium webdriver. Я не могу выбрать (скажем, 2-й) вариант из параметров, открытых по правому клику.
В моем текущем коде я могу щелкнуть правой кнопкой мыши по webElement, но не смог выбрать опцию из списка, который открывается после щелчка правой кнопкой мыши, поскольку он автоматически исчезает.
Actions action= new Actions(driver);
action.contextClick(productLink).build().perform();
Таким образом, с помощью этого кода я могу щелкнуть правой кнопкой мыши, но меню правой кнопки мыши автоматически исчезнет. Я хочу выбрать "2-й вариант" в меню "Правка".
Пожалуйста, помогите!!!
Ответы
Ответ 1
Чтобы выбрать элемент из контекстного меню, вам нужно просто перемещать позиции мыши с помощью события Key down следующим образом: -
Actions action= new Actions(driver);
action.contextClick(productLink).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.RETURN).build().perform();
надеюсь, что это сработает для вас.
Отличный день:)
Ответ 2
это лучший подход и его успех:
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();
Ответ 3
* Используя класс 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);
[ОБНОВИТЬ]
ВНИМАНИЕ: Ваш браузер всегда должен быть в фокусе, т.е. работать на переднем плане при выполнении действий робота, иначе любое другое приложение на переднем плане получит действия.
Ответ 4
Мы возьмем на себя действие класса действия WebDriver и выполните щелчок правой кнопкой мыши. ниже приведен синтаксис:
Actions action = new Actions(driver).contextClick(element);
action.build().perform();
Ниже приведены шаги, которые мы выполнили в примере:
- Определите элемент
- Подождите, пока не появится элемент
- Теперь выполните контекстный клик
- После этого нам нужно выбрать нужную ссылку.
пакет 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();
}
}
Ответ 5
Возможно, вам придется переместить мышь в любое конкретное место после контекстного щелчка(), подобного этому -
Actions action = new Actions(driver);
actions.contextClick(link).moveByOffset(x,y).click().build().perform();
Чтобы понять, как moveByOffset (x, y) работает, посмотрите здесь;
Надеюсь, это сработает. Вам нужно будет вычислить значения смещения для x и y;
лучшим способом было бы найти размер каждой кнопки опции после щелчка правой кнопкой мыши, а затем, если вы нажмете на второй вариант.
x = ширина кнопки опции/2
y = 2 * (размер каждой кнопки выбора)
Ответ 6
Вместо попытки щелкнуть правой кнопкой мыши, используйте сочетание клавиш:
Дважды щелкните элемент → удерживайте Shift и нажмите F10.
Actions action = new Actions(driver);
//Hold left shift and press F10
action.MoveToElement(element).DoubleClick().KeyDown(Keys.LeftShift).SendKeys(Keys.F10).KeyUp(Keys.LeftShift).Build().Perform();
Ответ 7
Вот код для щелчка правой кнопкой мыши на веб-элементе.
Actions actions = new Actions(driver);
Action action=actions.contextClick(WebElement).build(); //pass WebElement as an argument
action.perform();
Ответ 8
Вот как я мог щелкнуть четвертый элемент в 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();
Надеюсь, что это поможет
Ответ 9
Щелчок правой кнопкой мыши может быть достигнут с помощью исполнителя Java script (в тех случаях, когда класс действия не поддерживается):
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);
Ответ 10
Лучший и простой способ.
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.cssSelector("a[href^='https://www.amazon.in/ap/signin']"))).contextClick().build().perform();
Вы можете использовать любой селектор на месте cssSelector
.
Ответ 11
Использование 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()
Ответ 12
WebElement xx = driver.findElement(By.linkText("your element"));
Actions action = new Actions(driver);
System.out.println("To open new tab");
action.contextClick(xx).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyPress(KeyEvent.VK_ENTER);