2014-01-21 15 views
15

如果我这样做expect(img).not.toBe(null)那么我得到一个错误: Error: expect called with WebElement argment, expected a Promise. Did you mean to use .getText()?。我不想让文字在img中,我只想知道标签是否存在于页面上。如何测试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更改为不存在的内容会失败。

我该如何正确地测试一个标签在非角度应用上下文中与量角器一起存在?

回答

32

编辑2:

每编码下面的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的()返回一个承诺,这就是为什么你得到这个错误。

23

采用最新的量角器建立可以缩短它归结为以下几点:

expect(element(by.id('recaptcha_image')).isPresent()).toBe(true); 
+0

这个工作,但我希望这将是一个承诺,所以我会记录这个.. – nikravi