如何测试img标签是否存在?

时间:2014-01-21 16:17:44

标签: protractor

如果我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更改为不存在的内容会失败。

如何在非角度应用上下文中正确测试标记与量角器存在?

2 个答案:

答案 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);