Перейти к содержимому

Фотография

Поиск элемента по тексту в конкретной области страницы


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Zerg600

Zerg600

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 26 февраля 2020 - 08:40

Здравствуйте!

 

Selenium Java.

 

Мне нужно найти элемент, содержащий определённый текст в конкретной области страницы (так как за её границами есть другие, не нужные мне элементы с таким же текстом). Область содержит сложную динамическую структуру, так что предсказать точное положение элемента в будущем я не могу, другие атрибуты элемента не уникальны.

 

Я определил эту область как reservationList и теперь пытаюсь найти в ней текст 'Empty Table:

 

targetTable = assignTableList.findElement(By.xpath("//*[contains(text(), 'Empty Table')]")) - ищет по всей странице и находит не то;

 

("/*[contains(text(), 'Empty Table')]") ("*[contains(text(), 'Empty Table')]") или ("[contains(text(), 'Empty Table')]") - ничего не находят.

видимо, я что-то не понимаю о том, как в xPath использовать "*".

 

Другой элемент в этой области мне удаётся найти так:

WebElement reservation = reservationList.findElement(By.cssSelector("#"+reservationId));
но у него есть уникальный iD, а у нужного мне сейчас - нет: только текст.

css-селекторами вроде нельзя искать текст или я не понял - как.

 

По абсолютному полному пути он находится и

driver.findElement(By.xpath("/html/body/div[5]/div/div/div[1]/div[3]/div[3]/div/div[1]/div[2]/mrb-res[1]/div[2]/div[2]/div[1]/div/div[1]/div")).click();

отрабатывает;

то есть дело точно не в ожиданиях: элемент уже на странице, виден, с ним можно взаимодействовать и его ничего не перекрывает.

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

 

Подскажите, пожалуйста, как искать текст в определённой области DOM а не по всей странице?


  • 0

#2 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 26 февраля 2020 - 08:46

https://software-tes...s-findelements/

 

Поиск дочернего элемента с помощью xpath записывается через точку ".//xxxx" или "./xxxx"

  • 0

#3 Zerg600

Zerg600

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 26 февраля 2020 - 09:22

 

https://software-tes...s-findelements/

 

Поиск дочернего элемента с помощью xpath записывается через точку ".//xxxx" или "./xxxx"

 

 

Помогло!
Вот я так и знал, что это что-то предельно простое, но до чего я бы сам не догадался! Спасибо огромное!

В других местах мне вполне удавалось находить один элемент из другого таким путём

reservation.findElement(By.xpath("../../../div[2]/div[2]"))

или таким reservation.findElement(By.xpath("div[2]/div[5]"))

никак не мог предположить, что в данном случае надо начинать путь с указания на сам элемент - с точки!


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных