Проверьте, не отображается ли элемент - WebDriverJS

С помощью selenium а также webdriverJS Я хочу создать тест, чтобы проверить, не отображается ли элемент на странице. Чтобы проверить наличие одного или нескольких элементов, я решил использовать isDisplayed() функция:

driver.findElement(webdriver.By.css('.element')).isDisplayed();
  • Знаете ли вы похожую функцию, которая возвращает true если элементы, если элемент НЕ отображается?
  • isDisplayed() хорошо работает при использовании на одном element, Есть ли аналогичный способ проверить, отображаются ли несколько элементов?

Заранее спасибо за ваши ответы!

3 ответа

Решение

Чтобы ответить на ваши вопросы -

  • Нет, нет функции, которая возвращает true, если элемент отсутствует. Вы можете проверить наличие отрицательных (ложных) условий на существующих isDisplayed() метод. Вы можете использовать различные тестовые среды с webdriverjs и выполнять ложные утверждения, такие как жасмин, мокко и т. Д. Как использовать webdriverjs с Mocha и тестирование с жасмином
  • Если вы хотите проверить, отображаются ли несколько элементов, вы можете использовать встроенные циклы, такие как .each() или же .map() или же .reduce() (применимо, только если у вас есть несколько элементов, которые вы можете получить с помощью одного локатора) или вам нужно проверить их по отдельности.

Надеюсь это поможет.

isDisplayed() хорошо работает при использовании одного элемента. Есть ли аналогичный способ проверить, отображаются ли несколько элементов?

Это можно решить с помощью map(), Пример:

element.all(by.css(".element")).map(function (elm) {
    return elm.isDisplayed();
});

Это вернуло бы обещание, разрешающееся в массив логических значений.

Если вы хотите одно логическое значение, вы можете использовать reduce():

element.all(by.css(".element")).reduce(function (acc, elm) {
    return elm.isDisplayed().then(function (isDisplayed) {
        return isDisplayed && acc;
    });
}, false);

Я показываю, как я решил проблему, используя jasmineна тот случай, если это кому-то понадобится в будущем:

driver.findElement(webdriver.By.css('.element')).isDisplayed()
    .then(function(displayed) {
        expect(displayed).not.toBe(true);
    });

Я нашел это решение работает. Код оценивает присутствие элемента и возвращает истину или ложь. Тогда я мог бы оценить это значение и выполнить другие вещи на странице. Все еще есть небольшая ошибка: не удалось создать запись в кеш шейдера: -2 `

const exit =await driver.findElement(By.css('input[id^="Login"] ')).then(
()=>{return true} ). catch((err=> { if(err.name=== "NoSuchElementError") return false;
throw new Error (" No such element")}));

const check= (elem) => {
    return new Promise( (resolve,reject)=> {
        setTimeout(elem=> { 
            if( elem ===true) {resolve('HA-HA-HA') }
            else {reject(new Error('Not ha-ha-ha'))}
        },500,elem)

       })
   };
`
Другие вопросы по тегам