4 votes

Comment utiliser Driver Wait Until Text est dans selenium

J'essaie d'utiliser la fonction d'attente du pilote avec les éléments suivants condition d'attente .

Je veux tester que le texte sur un bouton est égal à / correspond à " S'inscrire ". Voici mon code :

driver.wait(until.elementTextIs(By.css('body > div.site-wrapper > div > div 
> div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary'),'Sign 
Up'),80000)

Mais après l'avoir exécuté, j'obtiens l'erreur suivante :

C:\Users\bob\Documents\testElectron\node_modules\selenium-
webdriver\lib\promise.js:2626   Uncaught TypeError: element.getText is not a 
function

J'ai essayé de récupérer le texte sur le bouton manuellement en utilisant

var Button = driver.findElement(By.css('body > div.site-wrapper > div > div 
> div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary'));
Button.getText().then(function(text){
 console.log(text);
});

et cela fonctionne, mais je voudrais utiliser la condition pour l'attente. PS : Le bouton existe et est visible lorsque je lance les commandes. J'utilise sélénium nodeJS avec le pilote de chrome.

6voto

Florent B. Points 8564

La fonction until.elementTextIs prend un élément web mais vous fournissez un localisateur.

Soit on attend l'élément et ensuite le texte :

var buttonLogin = By.css('body > div.site-wrapper > div > div > div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary');

driver.wait(until.elementTextIs(driver.wait(until.elementLocated(buttonLogin)), 'Sign Up'), 80000);

ou créer une condition d'attente qui attendra un élément contenant le texte souhaité :

var Condition = webdriver.Condition;

until.elementLocatedTextIs = function elementLocatedTextIs(locator, text) {
  return new Condition(
    'for element to be located ' + locator + ' with text ' + text,
    function(driver) {
      return driver.findElements(locator).then(function(elements) {
        return elements.filter(function(element) {
          return element.getText().then(t => t === text ? element : null);
        }).then(function(elements) {
          return elements[0];
        });
      });
    });
};

var buttonLogin = By.css('body > div.site-wrapper > div > div > div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary');

driver.wait(until.elementLocatedTextIs(buttonLogin), 'Sign Up'), 80000);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X