2017-02-09 5 views
-1

Ich versuche, Selenium Webdriver mit Python zu lernen. Mein Code für den Testfall sieht so aus:send_keys nicht senden nach Eingabe eingeben

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() 

Erster Schritt mit dem Fülltext "Berlin" und funktioniert ohne Probleme. Aber wenn der zweite Schritt kommt, sieht es so aus, als ob Keys.RETURN nach der Eingabe "Szczecin" nicht ausgeführt wird.

Ich habe versucht, dieses Problem mit einigen ActionChains zu lösen, aber nach .perform() habe ich Fehler und ich habe gelesen, dass diese Probleme mit Fehlern in Selenium/Mozilla zusammenhängen.

Mein Code für ActionChains war:

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

Irgendwelche Vorschläge, wie kann ich dieses Problem lösen?

+0

versuchen send_keys mit (u '\ ue007') anstelle von RETURN –

+0

@MarcvT Ich habe auch mit send_keys (u '\ ue007') versucht, aber das Verhalten ist das gleiche. Es erweitert nur die Liste mit Tipps für das Ziel (mit send_keys (Keys.RETURN) Verhalten ist das gleiche). Ich habe auch versucht mit send_keys (Keys.ENTER) – bMh

+1

'Aktionen' ist immer noch nicht in' Marionette' implementiert. Wenn Sie "ActionChains" verwenden müssen, versuchen Sie 'chromedriver' oder ersetzen Sie' ActionChains' Codezeilen mit ähnlichem Code – Andersson

Antwort

0

Sie können versuchen, das erste Element aus Dropdown-Vorschläge wählen statt Keys.RETURN verwenden:

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

Problem ist, dass nach meinem Befehl 'address.send_keys (Keys.RETURN) 'Dropdown-Liste erweitert wird. Aber wenn ich danach etwas hinzufüge, bleibt es verborgen. Code, den ich nach dem letzten send-Schlüssel hinzugefügt habe, war etwas wie: 'select_element = WebDriverWait (driver, 10) .until (EC.visibility_of_element_located ((By.XPATH, '// * [@ id =" route_item_1 "]/div [2]/div [1] '))) select_element.click() ' – bMh

+0

Drop-down erscheint, nachdem Sie den Namen der Stadt an das Eingabefeld gesendet haben - es ist nicht notwendig,' Return' zu verwenden. – Andersson

+0

Drop-down erscheint, wenn I Versuchen Sie dies manuell auszuführen. In meinem Skript wird diese Liste nur angezeigt, wenn das Skript alle Schritte beendet (aber send_key führt keine ENTER aus) und ich denke, das ist der Fall, warum send_keys in dieser Situation nicht korrekt funktioniert. – bMh

0

Es folgt für mich arbeiten:

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() 
Verwandte Themen