如果我expect(img).not.toBe(null)
,那么我收到错误:
Error: expect called with WebElement argment, expected a Promise. Did you mean to use .getText()?
。我不想在img中获取文本,我只是想知道页面上是否存在标记。
describe('company homepage', function() {
it('should have a captcha', function() {
var driver = browser.driver;
driver.get('http://dev.company.com/');
var img =driver.findElement(by.id('recaptcha_image'));
expect(img.getText()).not.toBe(null);
});
});
通过,但我不确定它是否正在测试正确的事情。将id更改为不存在的内容会失败。
如何在非角度应用上下文中正确测试标记与量角器存在?
答案 0 :(得分:32)
编辑2:
下面的Per Coding Smackdown,现在可以在量角器中找到更短的答案:
expect(element(by.id('recaptcha_image')).isPresent()).toBe(true);
编辑1:
我今天发现了isElementPresent(),它只是我在下面描述的更易读的快捷方式。请参阅:http://www.protractortest.org/#/api
您的用法是:
driver.isElementPresent(by.id('recaptcha_image')).then(function(present){
expect(present).toBe(false);
})
旧答案(这可行,但上面的读者更友好)
一般情况下,如果你不确定标签是否存在,你应该使用findElements(或者$$,这是css的findElements的别名)。然后测试数组长度。如果FindElement(和$)无法找到该元素,它将抛出一个错误。
因此而不是
var img =driver.findElement(by.id('recaptcha_image'));
expect(img.getText()).not.toBe(null);
使用:
driver.findElements(by.id('recaptcha_image')).then(function(array){
expect(array.length).not.toBe(0);
})
此外,getText()返回一个promise,这就是你收到错误的原因。
答案 1 :(得分:24)
使用最新的Protractor构建,您可以将其缩短为以下内容:
expect(element(by.id('recaptcha_image')).isPresent()).toBe(true);