2017-01-11 3 views
0

Je souhaite sélectionner une valeur dans le menu déroulant. Mon code sélectionne uniquement la première valeur dans le menu déroulant et je souhaite que vous cliquiez sur toutes les valeurs dans les menus déroulants et que vous vérifiiez s'ils sont chargés manuellement avec l'adresse URL et l'onglet de titre corrects. Je ne vois aucune erreur, et me montre que le test a réussi le test mais n'a pas fait ce que je voulais. J'utilise PageObject et PageFactory. S'il vous plaît aider.Utilisation de Selenium (Java), comment sélectionner une valeur dans le menu déroulant

Ceci est mon code pour la première valeur dans le menu déroulant:

public void clickOnAccessories(){ 

     WebElement element=driver.findElement(By.xpath("//a[text()='Product Category']")); 
     String mouseOver = "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(mouseOver, element); 

     waitForElementToBeDisplayed(driver.findElement(By.xpath("//*[text()='Accessories']")), 500); 
     Assert.assertTrue(driver.getCurrentUrl().equals("http://store.demoqa.com/products-page/product-category/accessories/")); 
     Assert.assertTrue(driver.getTitle().contains("Accessories")); 
    } 

Ceci est mon code HTML:

<li id="menu-item-33" class="menu-item menu-item-type-taxonomy menu-item-object-wpsc_product_category menu-item-has-children menu-item-33 has_children"> 
<span class="before"> </span> 
<a href="http://store.demoqa.com/products-page/product-category/"> 
<span></span> 
Product Category 
</a> 
<ul class="sub-menu" style="display: none;"> 
<li id="menu-item-34" class="menu-item menu-item-type-taxonomy menu-item-object-wpsc_product_category menu-item-34"> 
<span class="before"> </span> 
<a href="http://store.demoqa.com/products-page/product-category/accessories/" style="padding-left: 10px;"> 
<span></span> 
Accessories 
</a> 
</li> 
<li id="menu-item-35" class="menu-item menu-item-type-taxonomy menu-item-object-wpsc_product_category menu-item-35"> 
<span class="before"> </span> 
<a href="http://store.demoqa.com/products-page/product-category/imacs/" style="padding-left: 10px;"> 
<span></span> 
iMacs 
</a> 
</li> 
+0

Avez-vous une raison spécifique pour l'utilisation de clics de souris que des emplacements spécifiques? Je pense qu'il serait préférable d'utiliser d'autres méthodes de cliquer. –

+0

Je n'ai pas de raison particulière, je ne sais pas comment écrire une autre méthode. Pouvez-vous m'aider? –

+0

Pouvez-vous partager un extrait HTML du menu déroulant? Parce qu'il y a beaucoup de différents types de ceci. C'est important, donc quelqu'un ici peut faire une solution. –

Répondre

0

Voici le code de la souris en vol stationnaire sur un menu et puis cliquez sur un lien de sous-menu-

Actions action = new Actions(driver); 
WebElement menu = driver.findElement(By.xpath("//a[contains(.,'Product Category')]")); 
Thread.sleep(2000); 
action.moveToElement(menu).moveToElement(driver.findElement(By.xpath("//a[contains(.,'iMacs')]"))).click().build().perform(); 

Si vous souhaitez parcourir tous les sous-menus d'un menu, vous avez: pour obtenir tous les noms de menu tableau de chaînes, puis passer le nom dans xpath un par un

Actions action = new Actions(driver); 
String[] submenus = {"Accessories", "iMacs", "iPads"}; 
for(int i=0;i<submenus.length;i++) 
{ 
    WebElement we = driver.findElement(By.xpath("//a[contains(.,'Product Category')]")); 
    Thread.sleep(2000); 
    action.moveToElement(we).moveToElement(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]"))).click().build().perform(); 
    Thread.sleep(3000); 
}