Selenium пропустить элемент html со скрытым атрибутом

Я использую селен с java и пытаюсь протестировать сценарий поиска. После того, как я выполню поиск, элементы html, которые не соответствуют ключевому слову поиска, скрыты с помощью атрибута hidden (см. Пример ниже, первый элемент не соответствует критериям поиска, а второй -):

<ion-item-sliding class="item-wrapper" hidden="">
  <button class="item item-block item-md" ion-item="">
    <p>I am hidden</p>
  </button>
</ion-item-sliding>

<ion-item-sliding class="item-wrapper">
  <button class="item item-block item-md" ion-item="">
    <p>I am not</p>
  </button>
</ion-item-sliding>

Моя цель - найти текст в видимом элементе (второй в примере). Когда я использую простой селектор

// кнопка [@ class = 'item item-block item-md']

скрытый элемент обнаруживается, поэтому я использую такой селектор

// ion-item-slip [@ class = 'item-wrapper', а не @ type = 'hidden'] // кнопка [@ class = 'item-block item-md'] ...

но не повезло. Пожалуйста, посоветуйте с любыми идеями / документацией по селектору.


person Kirill    schedule 24.05.2017    source источник


Ответы (2)


Здесь вам нужно использовать функцию getAttribute. Что делает этот вызов, так это то, что он возвращает значение атрибута, если оно установлено, или ноль в противном случае.

Вы можете использовать FindElements, передавая свой селектор, и перебирать найденные элементы и возвращать только тот, где

getAttribute("hidden") != null

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

person Moe Ghafari    schedule 24.05.2017

Используйте метод isDisplayed (), чтобы увидеть, отображается ли элемент в браузере до получения текста, например

List <WebElement> elements = driver.findElements(By.cssSelector(".item.item-block.item-md"));
      for(WebElement e:elements)
      { 
        if(e.isDisplayed())
          String text = e.getAttribute("innerText");
      }
person Sai G    schedule 24.05.2017