J'ai un script de test qui passe essentiellement par un certain nombre d'étapes pour différents utilisateurs. Certains utilisateurs verront un bouton spécifique tandis que d'autres ne le verront pas.

J'ai créé une méthode qui vérifie si le bouton s'affiche ou non avec les éléments suivants:

public boolean check_create_new_item_button_visible(){

    Boolean visible = driver.findElement(By.linkText("New Item")).isDisplayed();
    return visible;
} 

Et est appelé de la manière suivante:

boolean visible = npc.check_create_new_item_button_visible();

Mais j'obtiens toujours l'erreur:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"link text","selector":"New Item"}

C'est ce à quoi vous vous attendez car le bouton n'est pas visible.

C'est probablement une erreur stupide, mais comment puis-je l'obtenir pour savoir si le bouton est à l'écran ou non pour que mon programme puisse continuer?

Incidemment, j'ai déplacé le code vers une partie du programme où le bouton est visible et le booléen visible renvoie true. Ainsi, le code fonctionne si le bouton est visible.

1
tarquin 17 janv. 2017 à 08:25

2 réponses

Meilleure réponse

Si driver.findElement renvoie l'élément s'il est trouvé ou renvoie NoSuchElementException si l'élément n'a pas été trouvé. Pour éviter l'exception, vous pouvez utiliser findElements et vérifier si la liste retournée contient des éléments, et si elle vérifie si la première est visible

public boolean check_create_new_item_button_visible() {
    List<WebElement> buttons = driver.findElements(By.linkText("New Item"));
    if (buttons.size() > 0 && buttons.get(0).isDisplayed())
    {
        return true;
    }
    return false;
} 
2
Guy 17 janv. 2017 à 05:41
public boolean check_create_new_item_button_visible(){
  try {
    boolean btnPresence = driver.findElement(By.linkText("New Item")).isDisplayed();
    boolean btnEnable = driver.findElement(By.linkText("New Item")).isEnabled();
    if (btnPresence ==true && btnEnable ==true)
    {
  // click on the search button
      WebElement btn = driver.findElement(By.linkText("New Item"));
      btn .click();
     }
   catch (org.openqa.selenium.NoSuchElementException e){
            return false;
      }
  }
1
Samir 007 17 janv. 2017 à 06:16