Невозможно ввести текст в поле ввода (Python + Selenium) - PullRequest
1 голос
/ 13 июня 2019

У меня есть следующий фрагмент кода HTML на веб-странице:

<div class="f0n8F ">
    <label for="f395fbf9cde026" class="_9nyy2">Phone number, username, or email</label>
    <input class="_2hvTZ pexuQ zyHYP" id="f395fbf9cde026" aria-describedby="slfErrorAlert" aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="75" name="username" type="text" value="">
</div>

И я пытаюсь ввести текст, используя следующий код:

username_element = WebDriverWait(driver, 5).until(expected_conditions.visibility_of_element_located((By.ID, "f395fbf9cde026")))
username_element.send_keys('abc')

Я получаю исключение TimeOut, даже когда пытаюсь (By.CLASS, "class _2hvTZ pexuQ zyHYP"), (By.XPATH, "//*[@id=\"f1798b97d45a38\"]").

Если я попытаюсь By.NAME, "username", на предыдущей странице есть еще один элемент с именем «username», и поэтому на этой предыдущей странице вводится «abc», прежде чем будут выполнены вышеуказанные строки кода.

Примечательно, что если я когда-нибудь попробую driver.implicitly_wait(x), никакого ожидания не произойдет.

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Требуемый элемент является динамическим элементом, поэтому для отправки последовательности символов вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих стратегий локатора:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[aria-describedby='slfErrorAlert'][name='username']"))).send_keys("KOB")
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@aria-describedby='slfErrorAlert' and @name='username']"))).send_keys("KOB")
    
  • Примечание : необходимо добавить следующий импорт:

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

Попробуйте использовать xpath, который должен быть уникальным.

username_element = WebDriverWait(driver, 5).until(expected_conditions.element_to_be_clickable((By.XPATH, "//input[@name='username'][@aria-describedby='slfErrorAlert']")))
username_element.send_keys('abc')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...