2014-07-22 6 views
0

Je suis en train de cliquer sur un bouton « Enregistrer » dans une fenêtre pop en utilisant Java Sélénium WebDriver, mais il jette une exceptionImpossible cliquer sur un bouton - Java Sélénium WebDriver

Message: Element n'est pas visible et donc ne peut pas être interagi avec la durée de la commande

Je suis en mesure de voir le bouton "Enregistrer" actif dans ma fenêtre pop. Je ne pouvais pas comprendre la raison pour laquelle il lance une exception.

Code HTML pour le bouton Enregistrer que je suis en train de cliquer,

</div> 
<br> 
<br> 
<br> 
<hr> 
<button class="btn btn-primary" style="margin-left: 10px" ng-click="saveData()" data-dismiss="modal" type="button">Save</button> 
<button id="buttonmodalcancel" class="btn btn-default" ng-click="cancel()" type="button">Cancel</button> 
</div> 

firepath: html/corps/div [6]/div/div/div [2]/div/div/bouton [ 1].

Je n'ai pas utilisé le XPath comme contenu après html/body/div, ne cesse de changer.

code Java que j'ai utilisé:

driver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
driver().findElementByXPath("//*[contains(text(), 'Save')]").click(); 
+0

Quelle exception est levée? – Richard

+0

@Richard, son ElementNotVisibleException – ASANT

Répondre

0

tout d'abord, votre code semble erroné. essayez celui-ci:

driver.manage().timeouts().implicitlyWait(10, "DefaultTimeOutInSec")), TimeUnit.SECONDS); 
driver.findElement(By.xpath("//*[contains(text(), 'Save')]")).click(); 

driver variable (appels) doivent être utilisés sans accolades;

d'autre part, vous pouvez utiliser le sélecteur CSS alternatif comme ils travaillent plus vite:

String buttonCss="button.btn.btn-primary"; 
driver.findElement(By.cssSelector(buttonCss)).click(); 

espère que cela fonctionne pour vous

+0

@ eugene.poschikov, driver() est une méthode personnalisée que je fais l'opération de pilote, dont j'ai hérité de ma classe parente. Mais, j'ai toujours la même erreur après avoir utilisé votre code. – ASANT

+0

imo, s'il lance un élément non visible, le problème est soit dans xpath (locator) avec lequel vous recherchez un élément, soit dans un élément qui n'a pas encore été rendu actif. vous pouvez utiliser fluentWait par exemple pour attendre que votre bouton soit rendu comme ici: http://stackoverflow.com/questions/12858972/how-can-i-ask-the-selenium-webdriver-to-wait-for-few-seconds –

+0

merci eugene. Appréciez votre réponse.Je donne un nom à l'opération que j'ai effectuée dans la fenêtre contextuelle actuelle, où le bouton Enregistrer est toujours actif quel que soit le nom que j'ai fourni. – ASANT

0

je me suis dit un moyen de résoudre le problème temporairement. Le problème que j'avais était le xpath n'était pas toujours pareil, il continue à changer dans un modèle spécifié. de l'échantillon de XPath que j'ai obtenu pour un élément,

html/body/div[6]/div/div/div/div/div/div/button[1] html/body/div[5]/div/div/div/div/div/div/button[1] html/body/div[2]/div/div/div/div/div/div/button[1]

Depuis, le nombre dans div était la seule variable dans mon XPath, j'ai utilisé un au-dessous XPath,

driver().findElement(By.xpath("html/body/div[*]/div/div/div/div/div/div/button[1]")).click(); 
0

Lorsque vous obtenez ce erreur, je vous suggère de vérifier que le sélecteur xpath ou css se rapporte à un et un seul élément.
J'utilise parfois une méthode qui clique sur le premier élément affiché. Fondamentalement, il ressemble à cela (vous devrez peut-être le corriger):

public void clickOnFirstDisplayedElement(String path){ 
    // Retrieve all the elements of the page that make sense with the xpath 
    int i = driver.findElements(By.xpath(path)).size(); 
    for(int x = 0; x < i; x++){ 
     int y = x + 1; 
     boolean isDisplayed = driver.findElement(By.xpath(path)).isDisplayed(); 
     if(isDisplayed){ 
      driver.findElement(By.xpath("(" + path + ")[" + y + "]")); 
      x = i; 
     } 
    } 
} 

Espérons que cela aide.

Questions connexes