J'utilise le webdriver Selenium. Je ne suis pas en mesure de sélectionner (disons 2ème) option parmi les options ouvertes sur clic droit.
Dans mon code actuel, je peux faire un clic droit sur webElement mais je ne peux pas sélectionner une option dans la liste qui est ouverte après un clic droit, car elle disparaît automatiquement.
Actions action= new Actions(driver);
action.contextClick(productLink).build().perform();
Donc, avec ce code, je peux faire un clic droit, mais le menu clic droit disparaît automatiquement. Je veux sélectionner dire 2ème option dans le menu contextuel.
S'il vous plaît aider !!!
Pour sélectionner l'élément dans le menu contextuel, vous devez simplement déplacer les positions de votre souris à l'aide de l'événement Key down comme ceci: -
Actions action= new Actions(driver);
action.contextClick(productLink).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.RETURN).build().perform();
espérons que cela fonctionnera pour vous. Passez une bonne journée :)
* En utilisant la classe Robot, vous pouvez le faire, essayez le code suivant:
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);
c'est une meilleure approche et c'est réussi:
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();
Nous prendrons l’aide de la classe d’action WebDriver et effectuerons un clic droit. la syntaxe est la suivante:
Actions action = new Actions(driver).contextClick(element);
action.build().perform();
Voici les étapes que nous avons suivies dans l'exemple:
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();
}
}
Vous devrez peut-être déplacer la souris vers un emplacement particulier après un clic contextuel () comme ceci -
Actions action = new Actions(driver);
actions.contextClick(link).moveByOffset(x,y).click().build().perform();
Pour comprendre le fonctionnement de moveByOffset (x, y), regardez ici ;
J'espère que ça marche. Vous devrez calculer les valeurs de décalage pour x et y;
le meilleur moyen serait de trouver la taille de chaque bouton d'option après un clic droit, puis si vous cliquez sur la 2ème option
x = largeur du bouton d'option/2
y = 2 * (taille de chaque bouton d'option)
Voici le code pour un clic droit sur un élément Web.
Actions actions = new Actions(driver);
Action action=actions.contextClick(WebElement).build(); //pass WebElement as an argument
action.perform();
Voici comment je pourrais cliquer sur le quatrième élément du 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();
J'espère que cela t'aides
Utilisation du clic droit avec 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()
Un clic droit peut également être obtenu à l'aide de l'exécuteur de script Java (dans les cas où la classe d'action n'est pas prise en charge):
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);
Manière meilleure et facile.
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.cssSelector("a[href^='https://www.Amazon.in/ap/signin']"))).contextClick().build().perform();
Vous pouvez utiliser n’importe quel sélecteur à la place de cssSelector
.