Selenium - поиск xpath по тексту (td / tr) - PullRequest
0 голосов
/ 05 июля 2018

У меня есть большая таблица электронных писем в формате HTML, я пытаюсь найти имя определенного электронного письма и затем выбрать кнопку в этом элементе. Я легко могу найти тело таблицы через XPATH с:

//*[@id="reportList"]/tbody

Тогда в этой таблице есть несколько строк (tr), можно ли искать текст во всех строках таблицы?

Самое близкое, что я получил:

driver.find_element(By.XPATH, '//*[@id="reportList"]/tbody[contains(text(), "example text")]')

К сожалению, это не может найти элемент.

html code

Я знаю, что могу просто скопировать XPATH для поиска конкретного tr, но в целях автоматизации я пытаюсь передать строку, а затем найти все tr для моего конкретного текста.

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Три варианта получения xpath:

XPATH= //*[@id='reportList']//*[contains(text(), 'example text')]

Если ваш текст с tr:

XPATH= //*[@id='reportList']/tbody//tr[contains(text(), 'example text')]

Если ваш текст с тд:

XPATH= //*[@id='reportList']/tbody//tr//td[contains(text(), 'example text')]
0 голосов
/ 05 июля 2018

Насколько я знаю, таблица имеет tr и td, и, вероятно, вам нужно td. Таким образом, xPath может быть таким:

driver.find_element(By.XPATH, "//*[@id='reportList']/tbody//td[contains(text(), 'example text')]")

где ...tbody//td... означает, что он будет искать во всех подузлах td из tbody. Так что td не должно быть прямым потомком tbody

PS Я бы также добавил метод wait, чтобы убедиться, что элемент присутствует:

# will wait up to 10 seconds until element will be present on the page
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//*[@id='reportList']/tbody//td[contains(text(), 'example text')]"))
    )

Примечание: вам нужно сделать несколько импортов:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...