2017-09-15 2 views
1

Actuellement, j'ai une page qu'il y a un élément qui est affiché au hasard. Pour cela, j'ai créé une fonction de condition:Si l'élément n'est pas présent, j'obtiens erreur même en ajoutant la fonction conditionnelle

this.checkDropdownPresent = function (dropdownLocator, chooseOption) { 
    dropdownLocator.isPresent().then(function(element) { 
     if (element) { 
      let select = dropdownLocator; 
      select.element(by.cssContainingText('option', chooseOption)).click(); 
     } 
    }); 
}; 

Lorsque l'élément est affiché dans l'écran, qui fonctionne bien et protractor interagir avec lui, mais quand l'élément ne figure pas dans l'écran, je reçois la message:

Failed: element not visible: Element is not currently visible and may not be manipulated 

Un conseil pour m'aider avec ça?

+1

Il semble que vous ayez besoin de vérifier si l'élément est visible, et pas seulement s'il existe. – Barmar

+1

Connexes: https://stackoverflow.com/questions/36544589/element-is-not-currently-visible-and-so-may-not-be-interact-with-when-clicking – Barmar

Répondre

1

Vous devrez également vérifier si l'élément est affiché. Votre élément est présent (c'est-à-dire une partie du DOM) mais il est caché. Notez que vous pouvez non seulement vérifier si l'élément est affiché sans d'abord vérifier s'il est présent. isDisplayed() méthode renvoie une erreur si l'élément n'est pas présent.

this.checkDropdownPresent = function (dropdownLocator, chooseOption) { 
    dropdownLocator.isPresent().then(function (present) { 
     if (present) { 
      dropdownLocator.isDisplayed().then(function (displayed) { 
       if (displayed) { 
        let select = dropdownLocator; 
        select.element(by.cssContainingText('option', chooseOption)).click(); 
       } 
      }); 
     } 
    }); 
}; 
0

Merci à tous pour les réponses. J'ai résolu mon problème en changeant isPresent() en isDisplayed(). Voir mon code maintenant:

this.checkDropdownPresent = function (dropdownLocator, chooseOption) { 
    dropdownLocator.isDisplayed().then(function(element) { 
     if (element) { 
      let select = dropdownLocator; 
      select.element(by.cssContainingText('option', chooseOption)).click(); 
     } 
    }); 
}; 
+1

Vous devriez lire à nouveau la réponse de finspin, C'est un peu mieux si vous voulez utiliser le clic conditionnel. La méthode "' isDisplayed() 'renvoie une erreur si l'élément n'est pas présent." ... donc si vous voulez éviter une erreur possible, il vaut mieux vérifier les deux dans votre scénario. Je marquerais sa réponse comme correcte. – Gunderson