2016-05-19 11 views
0

Ich schreibe einen Test mit Selen mit JavaScript.Javascript: selen webdriver isDisplayed() funktioniert nicht

An einem Punkt in meinem Test, Iterate durch ein Array von Eingabeelementen und möchte einen Wert für die Eingänge, die sichtbar sind, ausfüllen.

if (textInputs.length > 0) { 
    console.log('handling text input'); 
    var i, textInputLen; 
    for (i = 0, textInputLen = textInputs.length; i < textInputLen; i++) { 
     (function (index) { 
     if (textInputs[index].isDisplayed()) { 
      textInputs[index].sendKeys("custom text box - " + textBoxes); 
      textBoxes++; 
     }  
     }(i)) 
    } 
    } 

Ich erhalte den folgenden Fehler ElementNotVisibleError: element not visible, weil es in einem Eingang zu füllen versucht, das nicht auf dem DOM angezeigt wird. Warum funktioniert es nicht? Wie kann ich es zum Laufen bringen?

Ich habe ein paar Sache statt isDisplayed() versucht:

  1. I JS ausgeführt, um zu sehen, ob das Element Sichtbarkeit versteckt oder Anzeige zu keinem hatte gesetzt. Problem hier ist, dass das Element Bing angezeigt wird, in diesem Fall ist wegen einer Reihe von Dingen, und ich bin auf der Suche nach etwas allgemeiner. In diesem Fall wäre isDisplayed() genau was ich will.

Bitte geben

Antwort

0

Verfahren .isDisplayed() ein Versprechen gibt und nicht den angezeigten Zustand. Verwenden Sie then das aufgelöste Ergebnis zu erhalten:

element.isDisplayed().then(function(state){ 
    console.log(state): 
}); 

aber ein besserer Weg wäre die Liste der Elemente mit webdriver.promise.filter zu filtern:

var textInputs = driver.findElements(By.css("input[type=text]")); 

webdriver.promise.filter(textInputs, function(element) { 
    return element.isDisplayed(); 
}).then(function(element) { 
    element.sendKeys("my text"); 
});