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

Транспортир Проверьте, не существует ли элемент

У меня есть настройка на моем веб-сайте angular, который включает и выключает выпадающее меню. Если он выключен, он не отображается на главной странице.

С помощью Protractor мне нужно проверить, нет ли этого элемента, когда переключатель выключен. Однако я не должен быть брошен в Element Not Found Error, так как это один тест в множестве из многих. Как мне это сделать?

Я попытался сделать:

expect($$('.switch').count()).to.equal(0).and.notify(next);

Но я получаю AssertionError с этим...

4b9b3361

Ответ 1

Получил то, что работает, используя что-то, что я нашел в документах:

expect(element(by.css('.switch')).isPresent()).to.become(false).and.notify(next);

Также использует утверждения, поэтому он не прерывает cucumberjs.

Ответ 2

Еще один вариант, который работал у меня немного лучше, и использует метод "транспортир" для выполнения действий http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.all

element.all(by.css('.k-loading-image')).then(function(items) {
    expect(items.length).toBe(0);
});

(Я хотел проверить, что индикатор загрузки исчез)

Ответ 3

ни один из этих ответов, которые включают count(), работал у меня;

typeof $$ ('. selector'). count() is 'object'

вы должны использовать обещание вытащить значение count таким образом.

const nameSelector = '[data-automation="name-input"]';
const nameInputIsDisplayed = () => {
    return $$(nameSelector).count()
        .then(count => count !== 0)
}
it('should not be displayed', () => {
    nameInputIsDisplayed().then(isDisplayed => {
        expect(isDisplayed).toBeFalsy()
    })
})

Ответ 4

Я получил это, сделав это:

expect(element(by.css('css')).isPresent()).toBeFalsy();

Ответ 5

Эти ответы не ждут исчезновения элемента. Чтобы дождаться его исчезновения, вам нужно использовать ExpectedConditions, как показано ниже. InvisibilityOf определяет, покинул ли элемент DOM. См. Его в документах: https://www.protractortest.org/#/api?view=ProtractorExpectedConditions.

  export const invisibilityOf = (el) =>
     browser.wait(ExpectedConditions.invisibilityOf(el) as any, 12000, 
    'Element taking too long to disappear in the DOM')
  const el = element(by.css(arg1))
  return invisibilityOf(el)

Ответ 6

stalenessOf может быть хорошим способом: Транспортир -  ExpectedConditions.stalenessOf

Например, у вас есть модальный, который в настоящее время открыт. Вы закрываете его и ожидаете, что он не будет присутствовать:

element(by.css('.modal-dialog .cancel-button')).click();
browser.wait(EC.stalenessOf(element(by.css('.modal-dialog')), 60000);
expect(element(by.css('.modal-dialog')).isPresent()).toBeFalsy();