Сравнить элементы с помощью локаторов в веб-таблице Selenium + Python - PullRequest
0 голосов
/ 26 мая 2020

Идея такая - мне нужно проверить, что номер «зеленой стрелки» совпадает с номером «красной стрелки». ЭТИ НОМЕРА всегда генерируются с разными числами. Поэтому я делаю переменные first_value для «красной стрелки» и «second_value» для «зеленой стрелки». И все работает нормально (я думаю), НО я использую уродливый Xpath, так что может кто-нибудь помочь мне сделать мой Xpath немного красивее ИЛИ предоставить другой локатор, пожалуйста? Я не знаю, какой локатор я могу использовать в моем случае

first_value = wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/form/div[4]/div[2]/div/table/tbody/tr[4]/td/div[1]/div[2]/div[2]/table/tbody/tr[5]/td/table/tbody/tr[2]/td/div/div/table/tbody/tr[2]/td[7]"))).text

second_value = wait.until(EC.text_to_be_present_in_element((By.XPATH, "/html/body/form/div[4]/div[2]/div/table/tbody/tr[4]/td/div[1]/div[2]/div[2]/table/tbody/tr[5]/td/table/tbody/tr[2]/td/div/div/table/tbody/tr[1]/td[1]"), (first_value)))

введите здесь описание изображения

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Следующий XPath:

//tr[@class="GridAltRow_Default"][1]/td[1]=//tr[@class="GridAltRow_Default"][2]/td[7]

Будет выводить TRUE, если номер зеленой стрелки равен номеру красной стрелки.

0 голосов
/ 26 мая 2020

Вы можете извлечь всю HTML таблицы, используя get_attribute('outerHTML'). Затем проанализируйте всю таблицу, используя библиотеку pandas или какой-нибудь простой синтаксический анализатор, например: https://github.com/yuanxu-li/html-table-extractor, который даст вам объект python.

И затем сравните значение. Это должно быть менее подвержено ошибкам.

ИЛИ

запустите XPATH с //tr[@class='GridRowDefault']/... и //tr[@class='GridAltRowDefault']/... соответственно.

Обновление: это хорошее расширение, которое поможет вам определить xpaths: https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=en

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