量角器期望元素最终出现
Protractor expectation that element is eventually present
有没有办法让元素最终出现在页面上?例如
的一种方式
browser.wait(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');
因预期错误而不是超时而失败?本质上是一种在下面的行中使用 isEventuallyPresent()
而不是 isPresent()
的方法
expect(element(by.partialLinkText('Continue')).isPresent()).toBe(true);
作为参考,我正在使用 browser.ignoreSynchronization = true
尽管它是一个 Angular 应用程序,并且使用 Jasmine(至少现在是这样)。
与 browser.wait()
一起使用的 presenceOf
预期条件 将允许在测试中有一行:
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');
其中 EC
是 protractor.ExpectedConditions
- 我通常通过 global
命名空间 在 onPrepare()
中。
请注意,如果出现故障,您将遇到 超时错误 ,但会出现 Unable to find continue link
错误描述。
作为旁注,提供有意义的自定义错误描述很重要,就像您已经做的那样。如果你想强制执行它,有一个 eslint-plugin-protractor
plugin to ESLint
static code analysis tool that would warn you 如果有一个 browser.wait()
使用没有明确的错误描述文本。
利用
的事实
browser.wait
returns 一旦条件函数 returns 为真就解决的承诺,如果超时则拒绝。
如果expect
传递了一个承诺,它只会在承诺被解决时运行期望
您可以创建一个函数来包装对 browser.wait
的调用
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);
或者,要使其在任何浏览器实例上运行,您可以对 Protractor 原型进行猴子修补
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 异步测试超时,在量角器配置文件中指定为 jasmineNodeOpts: {defaultTimeoutInterval: timeout_in_millis}
有没有办法让元素最终出现在页面上?例如
的一种方式browser.wait(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');
因预期错误而不是超时而失败?本质上是一种在下面的行中使用 isEventuallyPresent()
而不是 isPresent()
的方法
expect(element(by.partialLinkText('Continue')).isPresent()).toBe(true);
作为参考,我正在使用 browser.ignoreSynchronization = true
尽管它是一个 Angular 应用程序,并且使用 Jasmine(至少现在是这样)。
与 browser.wait()
一起使用的 presenceOf
预期条件 将允许在测试中有一行:
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');
其中 EC
是 protractor.ExpectedConditions
- 我通常通过 global
命名空间 onPrepare()
中。
请注意,如果出现故障,您将遇到 超时错误 ,但会出现 Unable to find continue link
错误描述。
作为旁注,提供有意义的自定义错误描述很重要,就像您已经做的那样。如果你想强制执行它,有一个 eslint-plugin-protractor
plugin to ESLint
static code analysis tool that would warn you 如果有一个 browser.wait()
使用没有明确的错误描述文本。
利用
的事实browser.wait
returns 一旦条件函数 returns 为真就解决的承诺,如果超时则拒绝。如果
expect
传递了一个承诺,它只会在承诺被解决时运行期望
您可以创建一个函数来包装对 browser.wait
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);
或者,要使其在任何浏览器实例上运行,您可以对 Protractor 原型进行猴子修补
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 异步测试超时,在量角器配置文件中指定为 jasmineNodeOpts: {defaultTimeoutInterval: timeout_in_millis}