How do I test if an img tag exists?

2019-03-24 03:21发布

if I do expect(img).not.toBe(null) then I get an error: Error: expect called with WebElement argment, expected a Promise. Did you mean to use .getText()?. I don't want to get the text inside an img, I just want to know if the tag exists on the page.

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);
});
});

Passes but I'm not sure it is testing the right thing. Changing the id to something that doesn't exist does fail.

How do I properly test for a tag to exist with protractor in a non-angular app context?

标签: protractor
2条回答
The star\"
2楼-- · 2019-03-24 03:55

Using the latest Protractor build you can shorten it down to the following:

expect(element(by.id('recaptcha_image')).isPresent()).toBe(true);
查看更多
在下西门庆
3楼-- · 2019-03-24 04:19

Edit 2:

Per Coding Smackdown below, an even shorter answer is now available in protractor:

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


Edit 1:

I discovered isElementPresent() today which is just a more readable shortcut for what I described below. See: http://www.protractortest.org/#/api

Usage for you would be:

driver.isElementPresent(by.id('recaptcha_image')).then(function(present){
    expect(present).toBe(false);
})

Old answer (this works but the above is more reader friendly)

In general you should use findElements (or $$ which is an alias for findElements by css) if you're not sure a tag will be there. Then test for the array length. FindElement (and $) will just throw an error if it cant find the element.

Therefore instead of

var img =driver.findElement(by.id('recaptcha_image'));

expect(img.getText()).not.toBe(null);

use:

driver.findElements(by.id('recaptcha_image')).then(function(array){
    expect(array.length).not.toBe(0);
})

Also, getText() returns a promise which is why you're getting that error.

查看更多
登录 后发表回答