2016-05-19 5 views
0

JavaScriptを使用してセレンでテストを行っています。Javascript:selenium webdriver isDisplayed()not working

私のテストでは、ある時点で、入力要素の配列を反復し、表示されている入力の値を入力したいと思います。

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)) 
    } 
    } 

私はDOMに表示されていない入力に記入しようとしているので、次のエラーElementNotVisibleError: element not visibleを取得しておきます。それはなぜ機能しないのですか?どうすればそれを稼働させることができますか?

私の代わりにisDisplayed()のいくつかのことを試してみました:

  1. 私は要素がnoneに隠したり表示に設定し、視認性を持っていたかどうかを確認するためにJSを実行します。ここで問題となるのは、この場合表示されている要素のビンディングは数多くのものが原因であり、より一般的なものを探しています。この場合、isDisplayed()となります。

約束していない表示された状態を返します.isDisplayed()

答えて

0

方法を教えてください。解決結果を得るためにthenを使用します。

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

をしかし、より良い方法はwebdriver.promise.filterで要素のリストをフィルタリングするために、次のようになります。

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"); 
});