Подтвердить что ты не робот

Как проверить, существует ли тег img?

если я делаю 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);
});
});

Проходит, но я не уверен, что он проверяет правильную вещь. Изменение идентификатора на то, что не существует, не сработает.

Как правильно проверить, существует ли тэг с транспортиром в контексте приложения angular?

4b9b3361

Ответ 1

Изменить 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 (или $$, который является псевдонимом для findElements css), если вы не уверены, что там будет тег. Затем проверьте длину массива. 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() возвращает обещание, поэтому вы получаете эту ошибку.

Ответ 2

Используя последнюю сборку Protractor, вы можете сократить ее до следующих значений:

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