У меня проблемы с возможностью выбрать опцию RUC в этом программном обеспечении с селеном, метки не содержат идентификаторов, которые их различают, и классы одинаковы:
Я использую следующий код, но он не работает для меня:
label_tipo_documento = driver.find_element_by_xpath('//div[@id = "form-group-tipo_documento"]//div[@class = "col-sm-3"]//label[@class = "radio-inline"][2]')
print(label_tipo_documento.text)
label_tipo_documento.click()
Я пытаюсь выбрать второй вариант среди меток [2] (RUC) и получаю следующее сообщение:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@id = "form-group-tipo_documento"]//div[@class = "col-sm-3"]//label[@class = "radio-inline"][2]"}
(Session info: chrome=87.0.4280.88)
Однако, когда я делаю это с [1] вместо [2], он находит значение:
DNI
Используйте следующий xpath
, чтобы нажать на 2-й переключатель.
label_tipo_documento = driver.find_element_by_xpath("//label[./input[@value='RUC']]")
print(label_tipo_documento.text)
label_tipo_documento.click()
Если вы хотите использовать индексацию, попробуйте этот код.
label_tipo_documento = driver.find_element_by_xpath('(//div[@id = "form-group-tipo_documento"]//div[@class = "col-sm-3"]//label[@class = "radio-inline"])[2]')
print(label_tipo_documento.text)
label_tipo_documento.click()
//div[@id = "form-group-tipo_documento"]//div[@class = "col-sm-3"]//label[@class = "radio-inline"][2]
Означает, что вы хотите выбрать вторую метку потомка узла div
(у него только одна метка потомка). Пока вам нужно выбрать второе вхождение метки. Так что либо попробуй
label_tipo_documento = driver.find_element_by_xpath('(//div[@id = "form-group-tipo_documento"]//div[@class = "col-sm-3"]//label[@class = "radio-inline"])[2]')
или
label_tipo_documento = driver.find_elements_by_xpath('//div[@id = "form-group-tipo_documento"]//div[@class = "col-sm-3"]//label[@class = "radio-inline"]')[1]
Доброе утро.
Итак, основываясь на вашем изображении, я считаю, что xpath
вам понадобится это.
# XPATH
//div[contains(@id, 'tipo_documento')]//label[@class='radio-inline']//input[@value='DNI']
На основе этого xpath
вы должны создать переменную для radio button
, которую вы хотите щелкнуть, а затем выполнить ее с помощью следующей команды.
myValue = "DNI"
driver.find_element(By.XPATH, "//div[contains(@id, 'tipo_documento')]//label[@class='radio-inline']//input[@value='{0}']".format(myValue)).click()
Основываясь на этом коде, вы можете изменить «DNI» на «RUC» или «CEX», и все будет готово.
Чтобы щелкнуть элемент, связанный с текстом как RUC, вы можете использовать любую из следующих стратегий локатора:
Использование css_selector
вместо <input>
:
driver.find_element_by_css_selector("div#form-group-tipo_documento label.radio-inline > input[value='RUC']").click()
Использование текста xpath
и <label>
:
driver.find_element_by_xpath("//div[@id='form-group-tipo_documento']//label[@class='radio-inline' and contains(., 'RUC')]/input").click()
В идеале, чтобы щелкнуть элемент, вам нужно вызвать WebDriverWait для element_to_be_clickable()
, и вы можете использовать одну из следующих стратегий локатора:
Использование CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#form-group-tipo_documento label.radio-inline > input[value='RUC']"))).click()
Использование XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='form-group-tipo_documento']//label[@class='radio-inline' and contains(., 'RUC')]/input"))).click()
Примечание. Вы должны добавить следующие импорты:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Вы можете найти пару соответствующих обсуждений NoSuchElementException в:
Это сработает, возможно, лучше использовать find_elements_by_xpath, а затем выполнять индексацию в python, а не в xpath.