首页 > 解决方案 > 量角器中嵌套承诺的返回元素如何

问题描述

我在量角器中创建了以下函数:

function getChildElementByText(parentElement, tagName, textToSearch)
{
    return parentElement.all(by.tagName(tagName))
    .then((items) => {
      items.map( item => {
        item.getText().then(text => {
          if (text === textToSearch){
            return item;
          }
        });
      });
    });
}

获取<option>元素的元素的示例<select>

let myitem = selectorHelpers.getChildElementByText(clientIdSelect, 'option', 'ExampleText');
myitem.click();

这给了我以下错误:

Failed: myitem.click is not a function

我需要该函数返回与文本条件匹配的项目,然后单击该元素,如上例所示。

标签: javascriptseleniumprotractor

解决方案


使用map获取单个元素可能不是最好的方法。map根据每个项目的返回值返回一个新数组。

考虑使用一个for...or甚至是经典for循环来遍历每个项目,并在继续下一个项目之前async / await等待每个项目解决。item.getText()然后如果等待的结果等于textToSearch返回item对象。否则null循环后返回。

function getChildElementByText(parentElement, tagName, textToSearch) {
  return parentElement.all(by.tagName(tagName))
    .then(async items => {
      for (const item of items) {
        const text = await item.getText();
        if (text === textToSearch) {
          return item;
        }
      }
      return null;
    });
}

推荐阅读