Невозможно ввести текст в текстовое поле с помощью Selenium (python) - PullRequest
0 голосов
/ 11 декабря 2018

Учитывая, что это элемент текстового поля (Получено из Chrome, проверьте элемент https://www.mousehuntgame.com/login.php):

<input name="username" class="username" type="text" placeholder="Enter 
your username" onkeyup="app.pages.LoginPage.checkEnter(event, 'login');">

Я пытаюсь ввести некоторый текст в поле ввода. Я искал элемент поname и использовал send_keys () для ввода некоторого текста в текстовое поле

elem = driver.find_element_by_name("username")
elem.send_keys("aa")

Я получил исключение:

ElementNotVisibleException: Message: element not interactable

Я подозреваю, что не правильно использую find_element_by. Где ячто-то пошло не так?

Дополнительно: есть ли способ сообщить в Chrome, что я выбрал из метода find_element_by? Есть ли какой-нибудь метод для выделения в браузере, что я выбрал с помощью метода find_element_by?

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Как прокомментировал @Andersson, у вас есть более одного элемента с "username".

Вы должны использовать более конкретный XPath, например:

elem = driver.find_element_by_xpath('//input[@placeholder="Enter your username"]')

Или

elem = driver.find_element_by_xpath('//input[@class="username" and @type="text"]')

0 голосов
/ 11 декабря 2018

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

  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.username[name='username'][placeholder='Enter your username']"))).send_keys("Gen Tan")
    
0 голосов
/ 11 декабря 2018

Существует две формы: первая для регистрации, вторая - для входа в систему ... Обе имеют одинаковое поле ввода с именем "username"

Вы можете использовать ниже CSS-селектор, чтобы выбрать поле ввода в требуемой форме:

user_input_register = driver.find_element_by_css_selector("div.register input[name='username']")
user_input_login = driver.find_element_by_css_selector("div.login input[name='username']")

Или вы можете определить формы для дальнейшей обработки полей ввода:

register = driver.find_element_by_class_name('register')
login = driver.find_element_by_class_name('login')

username_register = register.find_element_by_name('username')
username_login = login.find_element_by_name('username')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...