Выберите 2nd DIV CLASS с тем же именем - Python Selenium - PullRequest
1 голос
/ 16 октября 2019

Я могу выбрать первый class="hm-Login_InputField "> штраф и передать имя пользователя

<div class="hm-Login ">
    <div class="hm-Login_UserNameWrapper ">
        <input type="text" class="hm-Login_InputField ">
        <div class="hm-Login_InputText ">Join</div>
    </div>
    <div class="hm-Login_PasswordWrapper ">
        <input type="text" class="hm-Login_InputField ">
        <input type="password" class="hm-Login_InputField Hidden ">
        <button tabindex="0" class="hm-Login_LoginBtn ">GO</button>
        <div class="hm-Login_InputText ">Lost Login?</div>
    </div>
</div>

elem = driver.find_element_by_class_name("hm-Login_InputField")
elem.click()
elem.send_keys("xxxxx")

Я устал копировать Xpath для 2-го текстового поля ввода / ввода пароля. с непостоянными результатами, иногда это работает, иногда нет.

/html/body/div[1]/div/div[1]/div/div[1]/div[2]/div/div[2]/input[2]

Как выбрать 2-й class="hm-Login_InputField? ввод текста / текстовое поле пароля?

Нужен ли относительный Xpath? Как это происходит?

Я пытался:

elem = driver.find_element_by_class_name("hm-Login_InputField Hidden ")
elem.click()
elem.send_keys("xxxxx")

NoSuchElementException: нет такого элемента: невозможно найти элемент: {"method": "css selector", "селектор ":". hm-Login_InputField Hidden "} (информация о сеансе: chrome = 77.0.3865.120)

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Этот xpath прошел успешно:

Elem = driver.find_element_by_xpath(**"//div[@class='hm-Login_PasswordWrapper ']//input[@type='text']")** 
elem.click() 
elem.clear() 

Теперь я могу выбрать поле.

Спасибо @Shubham Jain

0 голосов
/ 16 октября 2019

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

Также добавьте сначала ожидание, например, явное ожидание, например visibilityOfElementLocated или presenceOfElementLocated

, попробуйте ниже xpathа также:

//input[@type='password']

ИЛИ

//div[@class='hm-Login ']//div[@class='hm-Login_PasswordWrapper ']//input[@type='password']
0 голосов
/ 16 октября 2019

Если это работает иногда, это может быть из-за медленной загрузки элемента. Попробуйте добавить time.sleep(2) перед вызовом второго элемента и посмотрите, работает ли он. Также вместо driver.find_element_by_class_name("hm-Login_InputField Hidden ") вы можете использовать driver.find_elements_by_class_name("hm-Login_InputField"), и это вернет все элементы с классом "hm-Login_InputField". Тогда elem[0] будет вашим первым вводом elem[1] вторым и будет продолжаться.

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