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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了量角器测试在第二次运行中因ng-reflect属性而失败相关的知识,希望对你有一定的参考价值。

我为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()operation,它完全没问题。

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

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

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

答案

由于ng-reflect-*for debugging purposes,我不会依赖定位器。

我怀疑the function that adds ng-reflect-* attributes不一定在Angular确认Protractor“准备就绪”之前(每个Protractor“命令”都与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")

以上是关于量角器测试在第二次运行中因ng-reflect属性而失败的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在第二次运行测试时在 Mongoose 中收到错误“一旦编译后无法覆盖模型”?

系统互斥体的 AbandonedMutexException 在第一次运行被杀死时未在第二次运行中捕获

UILabel 在第二次设置属性文本时丢失文本属性

REACT - defaultChecked 在第二次加载时不呈现检查属性

Visual C++ CLR 设计器在第二次运行项目和编辑设计时总是显示 0x8000000A 错误

c#中让Windows窗体只运行一次,并在第二次启动窗体时激活该窗体