Javascript:selenium webdriver isDisplayed()无效

时间:2016-05-19 17:11:34

标签: javascript selenium selenium-webdriver

我正在使用JavaScript编写selenium测试。

在我的测试中,我迭代了一系列输入元素,并希望为可见的输入填充一个值。

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

我不断收到以下错误ElementNotVisibleError: element not visible,因为它正在尝试填写未在DOM上显示的输入。为什么不起作用?我怎样才能让它发挥作用?

我尝试了一些而不是isDisplayed()

  1. 我执行JS以查看元素是否将可见性设置为隐藏或显示为无。这里的问题是,在这种情况下显示的元素是由于大量的东西,我正在寻找更通用的东西。在这种情况下,isDisplayed()正是我想要的。
  2. 请告知

1 个答案:

答案 0 :(得分:0)

方法.isDisplayed()返回一个promise而不是显示的状态。使用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");
});