2016-10-22 2 views
0

J'essaie d'automatiser un site Web qui a différents systèmes métriques. L'application prend en charge à la fois le système métrique américain & système métrique britannique. Pour Ex: Dans le cas où j'ouvre l'application à partir d'un serveur américain, je vois les zones de texte pour Feet & pouces, & si j'ouvre la même application à partir d'un serveur différent, je vois les zones de texte dans Centimètres.Impossible de localiser l'élément - Automatiser un site Web dans différents paramètres régionaux à l'aide du pilote Web Selenium

J'ai écrit mon code afin qu'il vérifie d'abord si un élément textbox avec les pieds & pouces est présent, si elle est présente, alors il va de l'avant & entre des valeurs dans les zones de texte, d'autre si les pieds & pouces n'est pas , puis entrez les valeurs dans la zone de texte Centimètres.

/* 
* 
* This block is for the values in US version 
* 
*/ 
@FindBy(xpath = ".//*[@id='profile_height_large_value']") 
WebElement CurrentHeightinFeet; 

@FindBy(xpath = ".//*[@id='profile_height_small_value']") 
WebElement CurrentHeightinInches; 

/* 
* This block is for the values in British version 
* 
*/ 

@FindBy(xpath = ".//*[@id='profile_height_display_value']") 
WebElement CurrentHeightinCM; 

Et mon code pour vérifier si c'est dans l'une ou l'autre version est comme ci-dessous.

public void userFitnessDetails() { 
    CurrentWeight.sendKeys("70"); 

    if (CurrentHeightinFeet.isDisplayed()) { 
     CurrentHeightinFeet.clear(); 
     CurrentHeightinFeet.sendKeys("5"); 
     CurrentHeightinInches.clear(); 
     CurrentHeightinInches.sendKeys("10"); 
    } 

    CurrentHeightinCM.clear(); 
    CurrentHeightinCM.sendKeys("170"); 
} 

Si j'exécute le code ci-dessus je reçois une erreur - ECHEC: org.openqa.selenium.NoSuchElementException inscription: Impossible de trouver l'élément:

{"method":"xpath","selector":".//*[@id='profile_height_large_value']"} 

Quelqu'un pourrait-il me guider pour corriger cette ?

Merci

Répondre

1

Hypothèses - Vous travaillez sur un serveur britannique et en cours d'exécution dans des problèmes avec les entrées pieds de longueur américains. La page est complètement chargée et les éléments sont entièrement disponibles, donc les problèmes d'attente ne sont pas présents.

Vous rencontrerez des problèmes avec la méthode isDisplayed(). Il est utilisé pour déterminer si un élément présent dans la page n'est pas visible ou vice versa en raison du paramètre d'affichage de l'attribut de style. Ici vous avez mentionné en fonction de l'emplacement du serveur les éléments html pertinents sont présents ou non. Si l'élément n'est pas disponible, vous verrez l'exception.

Vous pouvez utiliser le plus sûr driver.findElements(), à la place de isDiplayed() condition vérifier, ce qui renvoie une liste et vous pouvez vérifier la taille pour déterminer la disponibilité.

+0

J'ai changé mon code selon votre suggestion, cependant, je rencontre un problème dans ma vérification de l'état. – AdiBoy

+0

@FindBy (xpath = ".//*[@id='profile_height_display_value ']")) \t WebElement CurrentHeightinCM; \t @FindAll (@FindBy (id = "profile_goal_weight_display_value")) \t WebElement GoalWeight; Aussi dans mon état vérifiez que j'utilise if (CurrentHeightinFeet.size()> 0 && CurrentHeightinInches.size()> 0) { \t \t \t CurrentHeightinFeet.clear(); \t \t \t CurrentHeightinFeet.sendKeys ("5"); \t \t \t CurrentHeightinInches.clear(); \t \t \t CurrentHeightinInches.sendKeys ("10"); \t \t} "La méthode sendKeys (String) n'est pas définie pour le type Liste " – AdiBoy

+1

Vous ne pouvez pas appeler sendKeys dans une liste contenant les WebElements. Ainsi, lorsque la taille de la liste est supérieure à 0, votre condition est remplie.L'élément que vous recherchez doit être extrait de la liste. Utilisez la méthode get (0) dans la liste pour obtenir WebElement. Et puis utilisez la méthode sendKeys. – Grasshopper