2016-09-02 3 views
0

Ich versuche, Elemente aus einem Dropdown-Menü basierend auf Eingabe dynamisch auszuwählen. Dies ist nicht wirklich ein Problem, es sei denn Werte teilen einen Namen. Zum Beispiel, wenn dies ist meine Gurke AussageSelen Umgang mit doppelten XPaths des gleichen Typs in Java

When I go to the "Inventory"/"Inventory" application 

Als ich nenne diese Methode:

@When("^I go to the \"([^\"]*)\"/\"([^\"]*)\" application$") 
public void i_go_to_the_application(String hoverMenu, String subMenuName) throws Throwable { 
     Actions actions = new Actions(driver); 
    WebElement menuHoverLink = driver.findElement(By.linkText(hoverMenu)); 
    actions.moveToElement(menuHoverLink); 
    Thread.sleep(1000); 
    WebElement submenu = driver.findElement(By.xpath("//span[.='" + subMenuName + "']")); 

    actions.moveToElement(submenu); 
    actions.click().perform(); 
    Thread.sleep(4000); 

Mein Test Absturz, weil es das subMenuElement nicht finden kann. Dieser Code funktioniert gut, wenn die Menünamen unterschiedlich sind, z. B. Inventar> Elemente.

Jetzt habe ich überprüft diese Frage bereits Selenium: handling multiple inputs with same xpath

jedoch die Lösung bieten scheint nicht hilfreich zu sein, da beide Elemente in dem Dropdown-Menü mit einem ein Untermenü zu, dass man sein: Inventar> Inventar

Ich lief dies durch die Selenium-IDE und egal wie viele Möglichkeiten ich habe versucht, das Inventar-Element zu finden, es findet immer nur ein Element. Da der Benutzer meiner Tests eine beliebige Anzahl von Elementen aus einem Dropdown-Menü und dann nachfolgenden Untermenüs auswählen kann, kann ich mich nicht auf IDs verlassen. Gibt es eine Möglichkeit, den ersten Menüpunkt sicher auszuwählen und dann den Untermenüpunkt auszuwählen.

+0

Sie HTML für dieses Menü teilen könnten und submemu auch –

Antwort

1

diese Änderung aus einem Teil Link-Text zu einer XPath-Suche

WebElement menuHoverLink = driver.findElement(By.linkText(hoverMenu)); 

auf unter

WebElement menuHoverLink = driver.findElement("//a[.='" + hoverMenu + "']"); 

Sie müssen nur die 2 XPaths anders sein, so auch wenn die Namen gleich sind, die Sie erhalten dein Ergebnis.

+0

ich diesen Ansatz versucht haben, beide Male sie das gleiche Element finden. Ich habe eine kleine Arbeit verwendet, wo ich nach der ID der Elemente scanne und dann einen! Vergleich benutze, um das andere Element zu finden. – Jrawr

0

Es scheint submemu Inventory Element vorhanden im Hauptmenü Inventory Element. Dann sollten Sie versuchen, submemu Element im Hauptmenü Kontext zu finden wie folgt: -

Actions actions = new Actions(driver); 
WebElement menuHoverLink = driver.findElement(By.linkText(hoverMenu)); 
actions.moveToElement(menuHoverLink); 

WebElement submenu = new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfNestedElementLocatedBy(menuHoverLink, By.xpath(".//span[.='" + subMenuName + "']"))) 

actions.moveToElement(submenu); 
actions.click().perform(); 
+0

Dies gibt immer noch die oberste Ebene zurück. – Jrawr

+0

Versucht einmal als 'menuHoverLink.findElement (By.xpath (" .// span [. = '"+ SubMenuName +' ']")); 'und lassen Sie mich wissen .. –

Verwandte Themen