如何编写函数将 ProtractorJS/Jasmine 中的元素链接在一起

How to write a function to chain elements together in ProtractorJS/Jasmine

我正在尝试构建一个可以接受标签名称数组的函数,方法是传入标签名称数组,例如 ['span', 'input', 'strong'] 我希望它到 return 一个链来搜索对于元素。例如,我想找到...

element(by.tagName('span'))
  .element(by.tagName('input'))
  .element(by.tagName('strong'));

通过使用我的函数...

  public static getNestedElements = (arrayOfElementTags) => {
    const temporaryElementArr = [];
    for (let i = 0; i < arrayOfElementTags.length; i++ ) {
      temporaryElementArr.push(element(by.tagName(arrayOfElementTags[i])));
    }
    for (let j = 0; j < temporaryElementArr.length; j++) {
      if (j !== temporaryElementArr.length) {
        temporaryElementArr[j] = temporaryElementArr[j] + '.';
      }
    }
    return temporaryElementArr
  };

上面的功能明显很烂,不能用。

element(by.tagName('span')).element(by.tagName('input')).element(by.tagName('strong'));
// equivalent to element(by.css('span input strong'))

因此,您可以使用 space 连接所有标签以生成 css 选择器。并使用 css 选择器来查找元素。如下完成。

public static getNestedElements = (arrayOfElementTags) => {
  return element(by.css(arrayOfElementTags.join(' ')));
}

我建议保持逻辑简单,而不是使用函数。

element(by.tagName('span')).element(by.tagName('input')).element(by.tagName('strong'));
//It is a simple way to get the chained element provided by protractor api 
documentation.

创建一个函数很麻烦,它不会一直给你想要的结果。