Использование Selenium в Python для ввода текста в формате валюты - PullRequest
0 голосов
/ 10 января 2019

Попытка ввести значение "100000" в веб-форму с использованием Selenium в Python, но она постоянно не работает независимо от того, как я пытаюсь ее отправить.

Прошу прощения за недостаток знаний о терминологии. Я буду стараться изо всех сил, но я самоучка и новичок. Кроме того, я прошу прощения, но я не могу сказать вам, веб-сайт или мой работодатель не будет очень счастлив.

Поле на веб-странице автоматически заполняется знаком доллара. Я знаю, что поле в веб-форме ожидает целое число в формате валюты. Когда я смотрю на элемент HTML на веб-странице, он дает следующую информацию

<input type="number" step="1" name="moneying" size="35" id="moneying" 
class="moneying input currency error" value="" data-type="currency" data- 
mandopt="mand" required="" pattern="[\$]?[0-9]+[\.]?[0-9]*" min="500" 
onblur="validate(this);">

Я пробовал:

  • используя класс send_keys просто без изменений
  • щелкнув по полю перед использованием send_keys
  • очистка поля перед использованием send_keys
  • ожидание, пока элемент может быть расположен на странице, а затем выполнение всего вышеперечисленного
  • использование send_keys с Keys.NUMPAD #
  • добавляя $ в начале числа
  • добавление \ $ в начале числа
  • с использованием драйвера Firefox вместо драйвера Chrome
  • ввод значения 100000.00 и 100000

Текущая версия моего кода:

    from selenium import webdriver
    driver = webdriver.Chrome('location on my pc')
    try:
        driver.get(r"relevant web page")
        moneying_box_wait = WebDriverWait(driver,20).until(EC.presence_of_element_located((By.ID,"moneying")))
        moneying_box = driver.find_element_by_id("moneying")
        moneying_box.click()
        moneying_box.clear()
        moneying_box.send_keys("100000")

Я хочу ввести 100000 в поле. Ничто не появляется в коробке вообще.

1 Ответ

0 голосов
/ 10 января 2019

Поскольку вы намереваетесь отправить последовательность символов вместо presence_of_element_located, вам нужно использовать element_to_be_clickable, и вы можете использовать любое из следующих решений:

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.moneying.input.currency.error#moneying"))).send_keys("$1000.0")
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='moneying input currency error' and @id='moneying']"))).send_keys("$1000.0")
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
...