Поиск элемента с постоянно меняющимся Xpath - PullRequest
0 голосов
/ 24 июня 2018

Я новичок в кодировании Selenium в Python, и я пытался найти эту кнопку по имени, id, xpath, а затем щелкнул по ней, но ничего не помогло.

Проблема в том, что я не могу найти кнопку, потому что xpath постоянно меняется, а имя идентификатора - просто «кнопка», поэтому его расположение не будет работать, потому что на странице много других кнопок. Как я могу найти элемент?

Вот сайты HTML:

<ul data-componentname="gender">

  <li id="b27296be-e8da-4d5a-acb6-d1674bf88568" class="">
    <input type="button">
    <span>Male</span>
  </li>

  <li id="32bf7074-6b69-41bb-9869-cf71ac42686f" class="">
    <input type="button">
    <span>Female</span>
  </li>

Вот что я пробовал:

clickGender = browser.find_element_by_xpath("b27296be-e8da-4d5a-acb6-d1674bf88568")

Любая помощь очень ценится.

Ответы [ 4 ]

0 голосов
/ 24 июня 2018

В соответствии с HTML , которым вы поделились, найдите динамическую кнопку, соответствующую тексту как Мужской или Женский , а затем нажмите на нее, чтобы вызвать WebDriverWait , чтобы элемент можно было нажимать , и вы можете использовать следующее решение:

  • Мужской:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@data-componentname='gender']//li//span[contains(.,'Male')]//preceding::input[1]"))).click()
    
  • Женский:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@data-componentname='gender']//li//span[contains(.,'Female')]//preceding::input[1]"))).click()
    

Примечание : Вам необходим следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 24 июня 2018

Ваш XPATH должен быть следующим (при условии, что вы хотите выбрать кнопку «Мужской»):

//li[span/text()='Male']
0 голосов
/ 24 июня 2018

Чтобы найти кнопку с текстом "Male", используйте это:

driver.find_element_by_xpath("//li[contains(string(), 'Male')]/input[contains(@type,'button')]")

Чтобы найти кнопку с текстом «Женщина», используйте:

 driver.find_element_by_xpath("//li[contains(string(), 'Female')]/input[contains(@type,'button')]")
0 голосов
/ 24 июня 2018

Вам нужно использовать find_element_by_id:

clickGender = browser.find_element_by_id("b27296be-e8da-4d5a-acb6-d1674bf88568")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...