量角器测试在第二次运行中因ng-reflect属性而失败

时间:2017-06-10 04:13:43

标签: angular protractor e2e-testing

我为Web应用程序的e2e进行了一系列Protractor测试。由于底层的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">

我的问题是关于在这里使用定位器。如果我将此代码用于此特定输入框 -

 element(by.css('[formcontrolname='email']'))

并执行任何sendKeys()操作,它完全没问题。

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

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

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

1 个答案:

答案 0 :(得分:2)

由于ng-reflect-*for debugging purposes我不会依赖它们上的定位器

我怀疑the function that adds ng-reflect-* attributes在Angular确认&#34;准备就绪&#34;之前不一定表现出来。到量角器(每个量角器&#34;命令&#34;与Angular进行同步)。换句话说,在您搜索输入时,尚未在元素上设置ng-reflect-name

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

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

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