Angularjs 量角器期望元素最终出现

Angularjs 量角器期望元素最终出现,angularjs,jasmine,protractor,e2e-testing,Angularjs,Jasmine,Protractor,E2e Testing,有没有一种方法可以让人们期望某个元素最终会出现在页面上?e、 g.一种解决问题的方法 browser.wait(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link'); 以预期错误而不是超时失败?从本质上讲,使用的方法是最终呈现()而不是下一行中的isPresent() expect(element(by.pa

有没有一种方法可以让人们期望某个元素最终会出现在页面上?e、 g.一种解决问题的方法

browser.wait(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');
以预期错误而不是超时失败?从本质上讲,使用
的方法是最终呈现()
而不是下一行中的
isPresent()

expect(element(by.partialLinkText('Continue')).isPresent()).toBe(true);
作为参考,我使用的是
browser.ignoreSynchronization=true
,即使它是一个有角度的应用程序,并且使用Jasmine(至少现在是这样)。

浏览器一起使用的预期条件。wait()
允许在测试中有一行:

var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');
其中,
EC
量角器。ExpectedConditions
-I通常通过
global
命名空间在
onPrepare()

请注意,在出现故障的情况下,可能会出现超时错误,但
无法找到continue链接
错误描述


作为补充说明,提供有意义的自定义错误描述非常重要,正如您已经做的那样。如果您想强制执行它,有一个to
ESLint
静态代码分析工具,如果使用的是
browser.wait()
,没有明确的错误描述文本。

使用

  • 返回一个承诺,该承诺在条件函数返回truthy时解析,如果超时则被拒绝

  • 如果通过了承诺,则只有在承诺得到解决时才会运行预期

您可以创建一个函数来包装对
浏览器的调用。请稍候

function eventual(expectedCondition) {
  return browser.wait(expectedCondition, 2000).then(function() {
    return true;
  }, function() {
    return false;
  });
}
然后创造一个期望

expect(eventual(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))))).toBe(true);
或者,要使其在任何浏览器实例上工作,可以对量角器原型进行monkey patch

protractor.Protractor.prototype.eventual = function(expectedCondition) {
  return this.wait(expectedCondition, 2000).then(function() {
    return true;
  }, function() {
    return false;
  });
}
并且可以用作

expect(browser.eventual(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))))).toBe(true);

为避免超时,必须确保传递给
browser.wait
的超时小于Jasmine异步测试超时,这是在量角器配置文件中指定的

不确定我是否完全理解,但我现在将作为一个注释发布-在
预期条件下
会解决您的问题吗?特别是
presenceOf
visibilityOf
——我使用它们在开始测试执行之前等待Modals(因为它们只有在被触发后才会动态附加到HTML中)。此外,还可以使用
stalenessOf
来确保DOM中不存在元素,然后使用上面列出的其他工具,确保它稍后在那里。谢谢你的回答。。。然而,我意识到我a)在最初的问题中遗漏了“presenceOf”,b)没有真正提出正确的问题来得到我想要的答案。不太确定它是否完成了,但是我已经编辑了这个问题。把它包装成一个可重用的函数是个好主意!