Javascript:selenium Web驱动程序isDisplayed()不工作

Javascript: selenium webdriver isDisplayed() not working

本文关键字:工作 isDisplayed 驱动程序 selenium Web Javascript      更新时间:2023-09-26

我正在使用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来查看元素的可见性是否设置为隐藏或显示为无。这里的问题是,在这种情况下,显示的元素bing是由于一系列因素造成的,我正在寻找更通用的东西。在这种情况下,isDisplayed()正是我想要的

请告知

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