Je veux faire passer la souris sur un menu déroulant. Lorsque nous survolons le menu, les nouvelles options s’affichent. J'ai essayé de cliquer sur les nouvelles options en utilisant le xpath. Mais vous ne pouvez pas cliquer directement sur les menus. Donc, de manière manuelle, j'essaie de survoler le menu déroulant, puis de cliquer sur les nouvelles options.
Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).build().perform();
Il n'est pas vraiment possible d'effectuer une action de survol de la souris. Vous devez plutôt enchaîner toutes les actions que vous souhaitez réaliser en une seule fois. Alors déplacez-vous vers l'élément qui révèle les autres, puis au cours de la même chaîne, déplacez-vous vers l'élément maintenant révélé et cliquez dessus.
Lorsque vous utilisez des chaînes d'action, vous devez vous rappeler de le "faire comme un utilisateur".
Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here"))).click().build().perform();
Aucune de ces réponses ne fonctionne lorsque vous essayez les choses suivantes:
Si vous insérez une commande 'effectuer' après le moveToElement, il se déplace vers l'élément et l'élément de sous-menu s'affiche pendant une brève période, mais il ne s'agit pas d'un survol. L'élément masqué disparaît immédiatement avant qu'il puisse être trouvé, ce qui entraîne une exception ElementNotFoundException. J'ai essayé deux choses:
Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
builder.moveToElement(clickElement).click().perform();
Cela n'a pas fonctionné pour moi. Ce qui suit a fonctionné pour moi:
Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
By locator = By.id("clickElementID");
driver.click(locator);
En utilisant les actions à survoler et le clic WebDriver standard, je pouvais survoler puis cliquer.
Basé sur this blog, j'ai été en mesure de déclencher le survol à l'aide du code suivant avec Selenium 2 Webdriver:
String javaScript = "var evObj = document.createEvent('MouseEvents');" +
"evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" +
"arguments[0].dispatchEvent(evObj);";
((JavascriptExecutor)driver).executeScript(javaScript, webElement);
Ce code fonctionne parfaitement bien:
Actions builder = new Actions(driver);
WebElement element = driver.findElement(By.linkText("Put your text here"));
builder.moveToElement(element).build().perform();
Après le survol de la souris, vous pouvez ensuite effectuer la prochaine action souhaitée sur les informations révélées.
Vérifiez cet exemple comment nous pourrions implémenter ceci.
public class HoverableDropdownTest {
private WebDriver driver;
private Actions action;
Consumer < By > hover = (By by) - > {
action.moveToElement(driver.findElement(by))
.perform();
};
@Test
public void hoverTest() {
driver.get("https://www.bootply.com/render/6FC76YQ4Nh");
hover.accept(By.linkText("Dropdown"));
hover.accept(By.linkText("Dropdown Link 5"));
hover.accept(By.linkText("Dropdown Submenu Link 5.4"));
hover.accept(By.linkText("Dropdown Submenu Link 5.4.1"));
}
@BeforeTest
public void setupDriver() {
driver = new FirefoxDriver();
action = new Actions(driver);
}
@AfterTest
public void teardownDriver() {
driver.quit();
}
}
Pour une réponse détaillée, vérifiez ici - http://www.testautomationguru.com/Selenium-webdriver-automating-hoverable-multilevel-dropdowns/
J'ai trouvé cette question à la recherche d'un moyen de faire la même chose pour mes tests Javascript, en utilisant Protractor (une interface javascript pour Selenium.)
Ma solution avec le rapporteur 1.2.0 et webdriver 2.1:
browser.actions()
.mouseMove(
element(by.css('.material-dialog-container'))
)
.click()
.perform();
Cela accepte également un décalage (je l’utilise pour cliquer au-dessus et à gauche d’un élément :)
browser.actions()
.mouseMove(
element(by.css('.material-dialog-container'))
, -20, -20 // pixel offset from top left
)
.click()
.perform();
Exemple de programme en survol de la souris avec Selenium Java WebDriver:
public class Mhover {
public static void main(String[] args){
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement ele = driver.findElement(By.id("gbqfba"));
Actions action = new Actions(driver);
action.moveToElement(ele).build().perform();
}
}
Tu peux essayer:
WebElement getmenu= driver.findElement(By.xpath("//*[@id='ui-id-2']/span[2]")); //xpath the parent
Actions act = new Actions(driver);
act.moveToElement(getmenu).perform();
Thread.sleep(3000);
WebElement clickElement= driver.findElement(By.linkText("Sofa L"));//xpath the child
act.moveToElement(clickElement).click().perform();
Si vous aviez le cas le web ont plusieurs catégorie, utilisez la première méthode. Pour le menu que vous vouliez, vous avez juste besoin de la deuxième méthode.