Получение XPATH для Selenium - PullRequest
       0

Получение XPATH для Selenium

0 голосов
/ 17 февраля 2020

В предыдущем вопросе пользователь предлагает следующее решение проблемы.

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='title 
login_title' and text()='Login']//following::div[1]//input[@class='text header_login_text_box 
ignore_interaction']"))).send_keys("someemail@email.com")

Однако, когда я go в свой элемент chromeинспектирования, я получаю следующий XPATH, перейдя copy> XPATH, который при добавлении, как показано ниже, больше не работает. Это также не выдает ошибку, просто электронная почта не вводится в поле.

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='__w2_wHsckeIm21_email']"))).send_keys("someemail@email.com")

Какая разница между ними? Почему работает только первый и как мне получить эту длинную рабочую версию xpath.

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

Ну, не конкретное решение как таковое, но попробуйте ChroPath Plugin. Также доступно в Chrome Интернет-магазине. https://autonomiq.io/chropath/

0 голосов
/ 17 февраля 2020

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

//form[@class='inline_login_form']//input[@name='email']

И я не рекомендую использовать id для идентификации в этом случае как dynamici c (то есть идентификатор будет меняться каждый раз, когда вы переходите на эту страницу). Поэтому не рекомендуется использовать id для определения местоположения элемента.

Существует несколько способов записи локатора для этого элемента, например

  1. // form [@ class = 'inline_login_form'] // input [@ name = 'email']
  2. // input [@ name = 'email'] [@ class = 'text header_login_text_box ignore_interaction']
  3. // input [@ name = 'email'] [начинается с (@ class, 'text header_login_text_box')]

Я не хочу продолжать давать все возможные варианты. Идея, которую я выбрал //form[@class='inline_login_form']//input[@name='email'], заключается в том, что я нахожу элемент ввода с именем email в form. Если вы попытаетесь найти элемент только с //input[@name='email'], тогда будет 2 элемента, и Selenium выберет первый элемент (который нам не нужен в этом случае), и это не трудно.

Если вы хотите Подробнее о xpath и о том, как разработать правильный xpath для целевого элемента, см. этот пост

0 голосов
/ 17 февраля 2020

Я подозреваю, что id не является стабильным селектором для Quora. Когда я пытаюсь повторить ваши действия сегодня, я нахожу, что XPath немного отличается, потому что идентификатор поля ввода отличается.

Сегодня: //*[@id="__w2_wtEXFdHr21_email"]
В вашем примере: //*[@id='__w2_wHsckeIm21_email']

XPath свободно говорит о том, как вы перемещаетесь по DOM, чтобы добраться до интересующего вас элемента (ов). Есть много способов добраться до определенного элемента. Инструменты разработчика Chrome дадут вам один способ (или два, если вы посчитаете «Копировать полный XPath»).

На вопрос, который вы связали, есть несколько ответов, которые предлагают различные выражения XPath, а также селекторы CSS , Те, кто ищет input с name = email, найдут более одного элемента, где искомый ввод не первый.

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