Метод Python send_keys не отправляет нужные значения - PullRequest
1 голос
/ 05 апреля 2019

Я пишу сценарий, который заполнит форму. Он отправляет строку с определенным значением в текстовое поле, в которое должно быть введено значение. Однако, хотя текстовое поле всегда вводится, символы иногда становятся зашифрованными. Например, в одном поле вводимое значение было:

420420420420420

Тем не менее, скриншот из заполненного поля дал это значение:

420404204204202

Почему это? Есть ли альтернативный метод, который можно использовать, чтобы избежать этой проблемы?

В частности, эти строки кода вызывают наибольшее количество проблем:

client.find_element_by_id("nnaerb").send_keys(checkout_parameters[9])
client.find_element_by_id("credit_card_month").send_keys(checkout_parameters[10])
client.find_element_by_id("credit_card_year").send_keys(checkout_parameters[11]) 

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Иногда поля ввода с карты могут быть немного хитрыми, и на скорости селен использует 'ключи', возможно, слишком быстро в некоторых случаях.Я бы посоветовал попробовать следующее:)

Установка реального значения с помощью Javascript для данного элемента, оно может не отображаться на экране, но значения на самом деле присваиваются.

nnaerb = driver.find_element_by_id("nnaerb")
month = driver.find_element_by_id("credit_card_month")
year = driver.find_element_by_id("credit_card_year")

driver.execute_script("arguments[0].value = " + checkout_parameters[9] + ";", nnaerb) 
driver.execute_script("arguments[0].value = " + checkout_parameters[10] + ";", month) 
driver.execute_script("arguments[0].value = " + checkout_parameters[11] + ";", year) 
0 голосов
/ 05 апреля 2019

Хм, странно, что он отправит их в неправильном порядке.Вы можете попробовать что-то вроде этого, может быть:

for key in checkout_parameters[9]:
    client.find_element_by_id("nnaerb").send_keys(key)

Таким образом, вы указываете, что они будут отправляться по одному по порядку?

Или вы действительно можете разбить его и использовать ActionChains:

from selenium.webdriver import ActionChains
action_chains = ActionChains(client)
action_chains.move_to_element(client.find_element_by_id("nnaerb"))
action_chains.click()
for key in checkout_parameters[9]:
    action_chains.key_down(key)
    action_chains.key_up(key)
action_chains.perform()

edit

Из документации по селену сказано в отношении .key_down():

Должно использоваться только с модификаторомклавиши (Control, Alt и Shift).

Таким образом, использование ActionChains будет выглядеть так:

from selenium.webdriver import ActionChains
action_chains = ActionChains(client)
action_chains.move_to_element(client.find_element_by_id("nnaerb"))
action_chains.click()
for key in checkout_parameters[9]:
    action_chains.send_keys(key)
action_chains.perform()

Что не похоже на то, чтобы получить лучшие результатыздесь, чем мой первый блок кода.

...