Angular ng reflect属性的量角器测试在第二次运行中失败

Angular ng reflect属性的量角器测试在第二次运行中失败,angular,protractor,e2e-testing,Angular,Protractor,E2e Testing,我对web应用程序的e2e进行了一系列量角器测试。有很多输入框,其中大多数都具有由底层Angular4代码生成的ng reflect name属性。下面是一个示例HTML代码段 <input _ngcontent-c6="" class="input ng-untouched ng-pristine ng-invalid ui-inputtext ui-corner-all ui-state-default ui-widget" formcontrolname="email" p

我对web应用程序的e2e进行了一系列量角器测试。有很多输入框,其中大多数都具有由底层Angular4代码生成的
ng reflect name
属性。下面是一个示例HTML代码段

  <input _ngcontent-c6="" class="input ng-untouched ng-pristine ng-invalid ui-inputtext 
  ui-corner-all ui-state-default ui-widget" formcontrolname="email" pinputtext="" 
  placeholder="Enter Email Address" spellcheck="false" type="text" ng-reflect-name="email">
然后执行任何
sendKeys()
操作,结果完全正常

但是,如果我使用这个定位器

 element(by.css('[ng-reflect-name="email"]'))

我的测试第一次成功运行,但在后续运行中出现了错误,并给出了一个
NoTouchElementException
。我已经搜索了SO和Angular文档,但我似乎无法解释为什么会发生这种情况。如果有人曾经遇到过这个问题,你能解释一下这里发生了什么吗?

既然
ng reflect-*
就在那里,我就不会依赖于他们

我怀疑在Angular向量角器确认“准备就绪”之前不一定执行(每个量角器“命令”都与Angular进行同步)。换句话说,在搜索输入时,
ng reflect name
尚未在元素上设置

如果仍要继续使用
ng reflect-*
属性,请尝试添加一个以等待元素出现:

var EC = protractor.ExpectedConditions;
var emailInput = element(by.css('[ng-reflect-name=email]'));
browser.wait(EC.presenceOf(emailInput), 5000);

emailInput.sendKeys("test@test.com")

嗯。你提出的调试点对我来说是新的,所以我会记住这一点。我不确定等待部分,因为我使用显式等待等待了将近20秒,但它失败了。另外,我使用“ng reflect-*使用的其他定位器也没有这个问题。@demouser123-hm,谢谢,我的假设不正确。。它太漂亮了:)。你确定元素确实存在吗?重新检查你是否在页面上你认为你在…是的。我很确定我已经到了我想要的那一页。
var EC = protractor.ExpectedConditions;
var emailInput = element(by.css('[ng-reflect-name=email]'));
browser.wait(EC.presenceOf(emailInput), 5000);

emailInput.sendKeys("test@test.com")