2017-10-16 6 views
0

Donc le problème que je suis est que j'essaie de compter combien d'éléments (il y a 8) sont dans la navigation menu de https://www.softrams.com/ et la logique ne tirera pas correctement. Soit j'utilise la mauvaise fonction, soit je ne la code pas correctement.écrire un test pour passer/échouer le nombre d'éléments dans un menu de navigation en utilisant Java et/ou Python

le code I construit pour cette fonction est

WebElement nav_menu_count = driver.findElement(By.xpath("//ul[contains(@class,'nav navbar-nav')]")); 
    System.out.println(nav_menu_count.getSize()); 
    String nav_count = "710, 51"; 
    if(nav_menu_count.equals(nav_count)) 
    System.out.println("Menu count is correct"); 
    else 
     System.out.println("Menu count is incorrect"); 

ma sortie de la console quand je lance ce code est:

(710, 51) le nombre de menu est incorrect

+0

utiliser à la place driver.findElements (forme plurielle) et le stocker dans une liste . Ensuite, utilisez size() à la place. getSize() vous obtiendra le coin supérieur gauche du premier menu. – Grasshopper

+1

Vous ne pouvez pas utiliser 'equals()' pour tester si 'WebElement' est égal à' String'. C'est en comparant les pommes avec les pastèques. – Kayaman

Répondre

0

Actuellement vous sélectionnez la barre de menu, et getSize() sur WebElement unique retournera width and height of the rendered element, pas le nombre d'éléments de menu.

Les éléments de menu ont la XPath suivante:

//ul[contains(@class,'nav navbar-nav')]/li/a 

Ayant cette XPath, sélectionnez tous les éléments, comme quelqu'un l'a suggéré dans les commentaires, et d'obtenir le nombre de ces articles:

List<WebElement> allMenuItems = driver.findElements(
       By.xpath("//ul[contains(@class,'nav navbar-nav')]/li/a")); 
int count = allMenuItems.size(); // should return 8 
0

Il y a plusieurs questions qui doivent être résolus:

  1. Votre localisateur va retourner le UL qui n'est pas le nombre d'éléments de menu, mais le nombre de menus, qui est 1. (NOTE: UL est une liste d'ordre et LI sont les éléments de liste.) Vous voulez le nombre de LI contenus dans l'UL que vous avez localisé .

  2. Vous utilisez .findElement() qui renvoie un seul élément ou déclenche une exception si l'élément est introuvable. Vous voulez .findElements() (notez le pluriel, dans l'élément s), puis comptez le nombre d'éléments dans la collection retournée.

  3. Vous comparez le compte à un ??? Chaîne "710, 51"? Je ne suis pas sûr de ce que c'est censé faire. Vous voulez plutôt une int, 8.

  4. nav_menu_count.equals(nav_count) est la comparaison d'un WebElement à un String qui ne fonctionnera pas.

  5. N'essayez pas d'écrire votre propre bibliothèque de validation. Enquêter sur JUnit ou TestNG pour Java et l'équivalent pour python, si vous allez de cette façon. Cela rendra votre vie beaucoup plus facile.

Maintenant, tout ce que le code est réduit à

List<WebElement> menus = driver.findElements(By.cssSelector("ul.nav > li")); 
Assert.assertEquals(menus.size(), 8);