验证DOM中不存在的元素时,量角器执行会挂起

时间:2017-06-08 07:49:08

标签: typescript protractor

这很奇怪,在我们验证测试用例不存在于dom中时,量角器执行会持续无限时间。 以下是我们尝试的代码,但它不知道为什么。 它一直在等待this.columnNamesInTableSingle元素,即使它不存在于DOM中,我们只需要验证

 var el = this.columnNamesInTableSingle;
        browser.wait(protractor.ExpectedConditions.not(protractor.ExpectedConditions.presenceOf(el)),5000);



expect(this.columnNamesInTableSingle.isPresent()).toBe(false);

 this.columnNamesInTableSingle.then(a=>{
    //         console.log(a.length+"==============================")
    //     },abc=>{
    //         console.log(abc)
    //     })

1 个答案:

答案 0 :(得分:0)

我知道这篇文章很老但我已经实现了一个函数,可以用来测试DOM中是否存在(或不存在)元素而没有任何wait

3个参数:

  • 字段:ElementFinder | ElementFinder[]已定位;
  • fieldName:string目标名称(仅用于登录);
  • 目前:boolean切换您的控件(测试是否存在);

功能:

export async function checkField(field: any, fieldName: string, present?: any) {
  let text: string;
  if (present === false) {
    if (field.length > 0) {
      field.forEach(async el => {
        try {
          text = await el.getText();
          expect('should not be present (' + fieldName + ')').toEqual('but it is');
        } catch (e) {
          expect(el.isPresent()).toBe(present);
        }
      });
    } else {
      try {
        text = await field.getText();
        expect('should not be present (' + fieldName + ')').toEqual('but it is');
      } catch (e) {
        expect(field.isPresent()).toBe(present);
      }
    }
  } else {
    if (field.length > 0) {
      field.forEach(async el => {
        try {
          text = await el.getText();
          expect(el.isPresent()).toBe(true);
        } catch (e) {
          expect('is present (' + fieldName + ')').toEqual('but i can\'t find it');
          throw e;
        }
      });
    } else {
      try {
        text = await field.getText();
        expect(field.isPresent()).toBe(true);
      } catch (e) {
        expect('is present (' + fieldName + ')').toEqual('but i can\'t find it');
        throw e;
      }
    }
  }
}

希望这仍然有用(我知道,可写得更好)

如果这有效并且满足您的问题,请考虑关闭它!