Как я могу предотвратить многократную передачу Sendium Chrome webdriver send_keys? - PullRequest
0 голосов
/ 01 апреля 2020

Я изучаю веб-автоматизацию, и в качестве контрольного примера я попытался найти рейс в компании «Экспедиа» и передать значения даты в указанные текстовые поля вылета / возврата. Для первого текстового поля все в порядке, и send_keys работает как положено, но по какой-то причине для второго (или текстового поля даты возврата) send_keys, кажется, передает как предыдущую дату, так и дату, которую я хочу, чтобы она прошла второе время вокруг Если вы запустите мой код, понятно, что произойдет, но вот и картинка:

enter image description here

Я не знаю, просто ли это из-за способ, которым у Expeda есть свои текстовые поля, или если я что-то напутал в своем программировании из-за моей неопытности, но помощь будет принята с благодарностью.

Вот мой код:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(executable_path='E:\Webdrivers\chromedriver.exe')

driver.implicitly_wait(5)
driver.get('https://www.expedia.com/')
driver.maximize_window()

driver.find_element_by_id('tab-flight-tab-hp').click() #clicks flight button
#driver.find_element(By.ID, 'tab-flight-tab-hp').click() can also be used to click flight button

time.sleep(2)
driver.find_element_by_id('flight-origin-hp-flight').send_keys('NYC') #Origin
driver.find_element_by_id('flight-destination-hp-flight').send_keys('Toronto') #Destination


driver.find_element_by_id('flight-departing-hp-flight').clear()
driver.find_element_by_id('flight-departing-hp-flight').send_keys('12/28/2020') #Departing

time.sleep(1)

driver.find_element_by_id('flight-returning-hp-flight').clear()
driver.find_element_by_id('flight-returning-hp-flight').send_keys("01/15/2021")

time.sleep(5)

driver.find_element_by_xpath('//*[@id="gcw-flights-form-hp-flight"]/div[8]/label/button').click()

1 Ответ

0 голосов
/ 01 апреля 2020

Сайт настроен так, чтобы принимать дату возвращения, совпадающую с датой отправления. Даже если вы используете clear () перед отправкой ключей, при использовании send_keys () команда сначала щелкает там. И это вызывает дату отъезда, чтобы войти. Вслед за тем, что вы передали в send_keys () Итак, что вы можете сделать, это отправить backspace для очистки даты и затем ввести новую дату возвращения.

  back = Keys.BACK_SPACE * 10 #mm/dd/yyyy counts to 10 characters
  driver.find_element_by_id('flight-returning-hp-flight').send_keys(back + "01/15/2021")

Таким образом, когда команда встречает send_keys () , дата отправления автоматически вводится сайтом, вы отправляете клавиши возврата и затем вводите дату возврата. Надеюсь, это поможет.

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