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

时间:2019-07-18 14:26:06

标签: jasmine protractor

我正在尝试通过传递标记名数组(例如['span', 'input', 'strong'])来构建一个可以接受标记名数组的函数,我希望它返回一个链来搜索元素。例如,我想找到...

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

以上功能显然很烂,无法正常工作。

2 个答案:

答案 0 :(得分:0)

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

因此,您可以将所有带有空格的标签连接在一起以生成css选择器。并使用css选择器查​​找元素。如下完成。

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

答案 1 :(得分:0)

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

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.

创建函数很麻烦,而且无法始终为您提供所需的结果。