2013-05-14 1 views
0

Je cours WebdriverJS sur nodeJS pour tester l'interface utilisateur d'un site Web. Je veux sélectionner et cliquez sur un élément de sous-menu dans une barre de menu déroulante. Les éléments du sous-menu sont masqués par CSS. La barre de menu ressemble à ceci:WebdriverJS et menus déroulants

<ul class="dropdown" id="mainNavList"> 
    <li class="active"> 
     <a href="/home"><span>Home</span></a> 
    </li> 
    <li class=""> 
     <a href="/MyProducts"><span>My Products</span></a> 
     <ul style="visibility: hidden;"> 
      <li class=""> 
       <a href="/uiuiu">Product A</a> 
      </li> 
      <li class=""> 
       <a href="/jkjkjk">Product B</a> 
      </li> 
     </ul> 
    </li> 

    <li>...</li> 

</ul> 

Si je tente de lancer cette approche:

mydriver.executeScript("return $(\"a:contains('My Products')\").mouseover();").then(function(){ 
mydriver.findElement(mywebdriver.By.xpath("//a[contains(text(), 'Product B')]")).click(); 
     }); 

le menu déroulant glisse vers le bas, mais cache directement après le montrer. Sur la console, je reçois une erreur de WebDriver:

ElementNotVisibleError: Element must be displayed to click (WARNING: The server did not provide any stacktrace information)

Toutes les idées?

+0

Vous devez trouver l'événement après lequel les options du sous-menu deviennent visibles.Au lieu de passer la souris, vous pouvez essayer de déplacer la souris ou cliquez sur cet élément. – Omkar

Répondre

0

Ceci est nouveau pour moi aussi, mais je voudrais enchaîner les appels de fonction de Cliquez sur la liste déroulante puis cliquez sur l'élément déroulant que vous voulez.

0

essayez ceci:

var menu = mydriver.findElement(mywebdriver.By.css('[href="/MyProducts"]')); 
menu.click(); 
menu.findElement(mywebdriver.By.css('[href="/jkjkjk"]')).click(); 

Comme James dit qu'il est sur le chaînage. Dans l'extrait au-dessus du chaînage est implicite (les deux méthodes findElement et click ajoutent un cadre au webdriver.controlFlow()