Сравните два элемента с помощью Xpath в веб-таблице - PullRequest
0 голосов
/ 27 мая 2020

Я использую Selenium + Python, пожалуйста, не забывайте об этом, когда напишете ответ. число "красная стрелка".

Эти числа всегда генерируются с разными числами. Поэтому я создаю переменную first_value для «красной стрелки» и «second_value» для «зеленой стрелки». И все работает нормально, но я использую уродливый Xpath, поэтому я хочу сделать свой Xpath немного красивее, но не знаю, как я могу это сделать в этом случае.

Вот мой код:

<tr class="GridPager_Default">
<td align="left" valign="top" colspan="27"><span id="Rad305104_ctl01_ctl03_ctl02_StatusLabel" style="float:left;">Ready</span></td>
</tr>
</tfoot>
<tbody>
<tr class="GridAltRow_Default">
<td>77915481</td>
<td style="display:none;">False</td>
<td style="display:none;">False</td>
<td>77915315</td>
<td>&nbsp;</td>
<td>2020-05-27 07:59:47</td>
<td>77915413</td>
...
</tr>

, а также до того, как есть очень большая часть кода, поэтому я не могу вставить его сюда, поэтому я делаю скриншот . Стрелки для сравнения .

Я пробую эти примеры, но все они дают мне сообщение:

Произошло исключение: TimeoutException

PS Для второго я использую уродливый на данный момент Xpath.

first_value = wait.until(EC.visibility_of_element_located((By.XPATH, "//tr[@class=GridAltRow_Default'][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)))

1 Ответ

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

Что мне приходит в голову:

Со следующим импортом:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

И с использованием XPath:

value1 = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//tr[@class='GridAltRow_Default'][1]/td[1]"))).getText()
value2 = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//tr[@class='GridAltRow_Default'][2]/td[7]"))).getText()
print(value1 == value2)

Это должно вывести TRUE.

EDIT: я не уверен, что вы правильно передаете переменную во втором выражении XPath. Что бы я попробовал:

value1 = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//tr[@class='GridAltRow_Default'][2]/td[7]"))).getText()

value2 = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element((By.XPATH, "/html/body/form/div[4]/div[2]/div/table//tr[4]/td/div[1]/div[2]/div[2]/table//tr[5]/td/table//tr[2]/td/div/div/table//tr[1]/td[1]"), "%s" % value1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...