Как выбрать только видимые элементы с помощью XPath?

У меня есть приложение GWT, для которого я пытаюсь написать несколько тестов с использованием Selenium .

Я использую XPath для идентификации элементов на странице для тестов. Использование id не будет работать, поскольку значения id автоматически генерируются GWT и могут меняться. Все началось хорошо, когда я понял, что могу найти кнопки по их ярлыкам следующим образом:

 //button[.='OK'] 

Однако, когда я начал запускать несколько тестов, у меня возникли проблемы. Я понял, что проблема заключается в том, что все разные «страницы» приложения GWT, которые были созданы Javascript, остаются в HTML в скрытых элементах

. Это означало, что мои тесты Селена иногда щелкали скрытыми кнопками вместо кнопки, видимой в текущем представлении.

Изучая HTML- код Firebug , кажется, что GWT скрывает элементы

, добавляя display: none к атрибуту style . Это означает, что я могу найти все скрытые кнопки OK следующим образом:

 //div[contains(@style,'display: none')]//button[.='OK'] 

Это найдет все скрытые кнопки OK, то есть кнопки, у которых есть предок

который скрыт при наличии display: none в style .

Мой вопрос: как использовать XPath для поиска только видимых кнопок OK? Как найти кнопки, у которых нет элементов предка

с display: none в style ?

Это должно работать:

 .//button[.='OK' and not(ancestor::div[contains(@style,'display:none')]) and not(ancestor::div[contains(@style,'display: none')])] 

РЕДАКТИРОВАТЬ:

Более простое и эффективное выражение ниже:

 //div[not(contains(@style,'display:none'))]//button[.='OK'] 

не работает должным образом, потому что каждая кнопка имеет хотя бы один div, который виден у его предков.

Selenium 2 Webdriver дает нам возможность метода isDisplayed (), который касается этой проблемы. Хорошая работа соседей.

 //div[contains(@style,'display: block')] 

Этот код найдет видимый элемент xpath

  • Преобразование JSON в XML в Java
  • Функция замены XSLT не найдена
  • Использование функций xpath в верхнем и нижнем регистре в среде IDE seleniumа
  • XPath для выбора нескольких тегов
  • Кодирование выражений XPath с одиночными и двойными кавычками
  • Как обновить XML с помощью XPath и Java
  • Могут ли SAX Parsers использовать XPath в Java?
  • Как выбрать все листовые узлы с помощью выражения XPath?
  • Специальный символ в запросе XPATH
  • Получение атрибута с использованием XPath
  • Как преобразовать строку в верхний или нижний регистр с помощью XSLT?
  • Давайте будем гением компьютера.