2017-02-09 4 views
-1

Я пытаюсь изучить Selenium webdriver с помощью Python. Мой код для тестового примера выглядит следующим образом:send_keys не отправляет ввод после ввода текста

import unittest 

#import time 

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
#from selenium.webdriver.common.action_chains import ActionChains 


class FindRouteToBerlin(unittest.TestCase): 
    # Start Firefox 
    def setUp(self): 
     self.driver = webdriver.Firefox() 

    def test_find_route_to_berlin(self): 
     driver = self.driver 
     # Open HERE Maps 
     driver.get('http://wego.here.com') 
     self.assertIn("HERE WeGo", driver.title) 
     # Go to Search field and fill with city 
     search = driver.find_element_by_xpath('//*[@id="searchbar"]/div/div/input') 
     search.send_keys('Berlin') 
     search.send_keys(Keys.RETURN) 
     # Press "Arrow" 
     arrow = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '/html/body/div[1]/div[6]/div/div/div[1]/div[2]/button'))) 
     arrow.click() 
     # Enter address 
     address = driver.find_element_by_xpath('//*[@id="itinerary_item_input_0"]') 
     address.send_keys('Szczecin') 
     address.send_keys(Keys.RETURN) 

     """actions = ActionChains(driver) 
     actions.move_to_element(address) 
     actions.send_keys(Keys.RETURN) 
     actions.perform()""" 

    #def tearDown(self): 
    # self.driver.quit() 

if __name__ == "__main__": 
    unittest.main() 

Первый шаг с заполнением текста «Берлин» и работает без проблем. Но когда наступает второй шаг, похоже, что Keys.RETURN не выполняется после ввода «Щецин».

Я пытался решить эту проблему с помощью ActionChains, но после .perform() У меня есть ошибка, и я прочитал, что эти проблемы связаны с ошибками в Selenium/Mozilla.

Мой код ActionChains был:

actions = ActionChains(driver) 
    actions.move_to_element(address) 
    actions.send_keys(Keys.RETURN) 
    actions.perform() 

Error: Message: POST /session/1caed99c-1577-4f1d-804b-4ee397d8750b/moveto did not match a known command

Любые предложения, как я могу решить эту проблему?

+0

попробуйте использовать send_keys (и '\ ue007') вместо RETURN –

+0

@MarcvT Я тоже пробовал с send_keys (u '\ ue007'), но поведение такое же. Он только расширяет список с подсказками для назначения (с поведением send_keys (Keys.RETURN) одинаково). Я также пытался с send_keys (Keys.ENTER) – bMh

+1

'Действия' по-прежнему не реализованы в' Marionette'. Если вам нужно использовать 'ActionChains', попробуйте' chromedriver' или замените строки кода ActionChains'ом аналогичным кодом – Andersson

ответ

0

Вы можете попробовать выбрать первый элемент из раскрывающихся предложений вместо использования Keys.RETURN:

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

address = driver.find_element_by_xpath('//*[@id="itinerary_item_input_0"]') 
address.send_keys('Szczecin') 
first_suggestion = wait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'dropdown_list_item')]"))) 
first_suggestion.click() 
+0

Проблема в том, что после раскрытия списка раскрывающегося списка 'address.send_keys (Keys.RETURN)'. Но когда я что-то добавляю, он остается скрытым. Код, который я добавил после последнего ключа отправки, был примерно таким: 'select_element = WebDriverWait (driver, 10) .until (EC.visibility_of_element_located ((By.XPATH, '// * [@ id =" itinerary_item_1 "]/div [2]/div [1] '))) select_element.click() ' – bMh

+0

Выпадающее меню появляется сразу после отправки имени города в поле ввода - нет необходимости использовать' Return' – Andersson

+0

Выпадающее меню появляется, когда я попробуйте выполнить это руководство. В моем скрипте этот список показан только тогда, когда скрипт заканчивает каждый шаг (но send_key не выполняет ENTER), и я думаю, что это так, потому что send_keys не работает корректно в этой ситуации. – bMh

0

Ниже работает для меня:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import Select 

def setUp(): 
    driver = webdriver.Chrome() 

    driver.maximize_window() 

    driver.implicitly_wait(30) 

    base_url = ('enter your url') 

    driver.get(base_url) 

    task = driver.find_element_by_id("some_element_id") 

    task.send_keys("Some_text",Keys.ENTER) 


setUp() 
Смежные вопросы