Транспортир, с isDisplayed () Я получаю NoSuchElementError: элемент не найден с использованием локатора

19

В protractor 2.0 я проверяю expect() , если отображается один элемент. Я ожидаю, что ложь, но странно, что я получаю следующую ошибку:

  

NoSuchElementError: элемент не найден с использованием локатора: By.id ("userForm")

Мой код:

describe('closeModal', function() {
    it('should close the alert that appears after registration.', function(){
        element(by.id('closeAlertModalButton')).click();
        expect(element(by.id('userForm')).isDisplayed()).toBeFalsy();
    });
});

Я понимаю, что получаю эту ошибку, потому что элемент больше не на странице (это то, что я хочу подтвердить), но не должен ли я получить ложь, а не ошибку?

    
задан Mikel 07.05.2015 в 13:35
источник
  • Вам следует лучше использовать isElementPresent или isPresent - у вас есть часть логики WebDriver –  Vasiliy Vanchuk 07.05.2015 в 13:39

3 ответа

28

isDisplayed() проверяет, является ли элемент видимым или нет, но вам нужно проверить, присутствует ли элемент в DOM или нет, используйте isElementPresent() или isPresent() :

expect(browser.isElementPresent(element(by.id('userForm')))).toBe(false);
expect(element(by.id('userForm')).isPresent()).toBe(false);

См. также:

ответ дан alecxe 07.05.2015 в 13:42
источник
  • Ты «ангел-транспортир»! Я многое узнал из ваших ответов здесь! Спасибо! @alecxe –  Idan E 10.07.2015 в 17:52
  • @IdanE, и я многое узнал из ваших вопросов! Спасибо! –  alecxe 10.07.2015 в 20:27
  • Если я делаю это в состоянии. это не работает. ех. если (browser.isElementPresent (элемент (by.id ( 'UserForm'))) –  ji-ruh 21.01.2017 в 18:46
  • @ ji-ruh browser.isElementPresent (элемент (by.id ('userForm')) возвращает обещание, которое всегда «правдиво». Вы должны явно решить обещание проверить фактическое значение присутствия. –  alecxe 22.01.2017 в 04:02
2

Эта ошибка является частью поведения WebDriver. Для таких случаев вам лучше использовать isPresent или isElementPresent     

ответ дан Vasiliy Vanchuk 07.05.2015 в 13:42
источник
0

Если элемент видимый делает A, если не видно, B, игнорируйте исключение, если элемент не найден:

element.isDisplayed().then(function(visible){
    if (visible) {
        // do A when element visible
    }else{
        // do B when element not visible 
    }
}, function () {
    //suppress exception if element is not found on page
});
    
ответ дан Sergiy Podgorniy 10.04.2018 в 19:08
источник