2011-02-07 12 views
5

Poniżej znajduje się mój skrypt, którego elementem jest check. Kiedy daję tego selektora:Problem z nawiasami [?] W selektorze css w Selenium-pythonie

css=input[name='flightSearchParam[3].originAirport'] 

w selen Ide to znajdź mi tego elementu, ale gdy uruchomię to w selen rc nie może go znaleźć. Myślę, że jest to problem z nawiasami.

Co muszę zmienić, aby znaleźć ten element przez selen rc?

go uruchomić w systemie Windows XP i Kultury Polskiej

Script jest gotowy do uruchomienia.

# -*- coding: utf-8 -*- 
from selenium import selenium 
import unittest, time, re 

class Untitled(unittest.TestCase): 
    def setUp(self): 
     self.verificationErrors = [] 
     self.selenium = selenium("localhost", 5555, "*chrome", "http://www.aa.com/") 
     self.selenium.start() 


def test_untitled(self): 
    sel = self.selenium 
    sel.open("/international/internationalSplashAccess.do?countryCodeForIP=PL") 
    sel.click("localeSubmit") 
    sel.wait_for_page_to_load("30000") 
    for i in range(60): 
     try: 
      if sel.is_element_present("aa-hp-multi-city-link2"): break 
     except: pass 
     time.sleep(1) 
    else: self.fail("time out") 
    sel.click("aa-hp-multi-city-link2") 
    sel.click("flightSearchForm.button.reSubmit") 
    sel.wait_for_page_to_load("30000") 

    for i in range(60): 
     try: 
      if sel.is_element_present(u"css=input[name='flightSearchParam[3].originAirport']"): break 
     except: pass 
     time.sleep(1) 
    else: self.fail("time out") 

def tearDown(self): 
    self.selenium.stop() 
    self.assertEqual([], self.verificationErrors) 

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

Korpus:

conn.request("POST", "/selenium-server/driver/", body, headers) 

u'cmd=isElementPresent&1=css%3Dinput%5Bname%3DflightSearchParam%5B2%5D.originAirport%5D&sessionId=02b3341a3fee46f5a1e6d9c13d6e8916' 

EDIT

zmienić go sel.is_element_present("dom=document.getElementsByName('flightSearchParam[3].originAirport')[0]"):

i znaleźć ten element. Ale nadal nie wiem, dlaczego css nie działa tutaj:/

+0

można zamieścić swoje Kod html, który chcesz dopasować – karlcow

+0

Myślę, że lepiej byłoby użyć selektora innego niż CSS (XPath, może?) – rs79

Odpowiedz

0

Spróbuj wymknąć się nawiasom z odwrotnymi ukośnikami.

+0

u "css = input [name =" flightSearchParam [3 /]. originAirport '/] "doesn Działa również, – user278618

+0

backslashes (\\), nie ukośniki (/) ... – ThiefMaster

+0

Przepraszam, mam na myśli sel.is_element_present (u "css = input [nazwa =" flightSearchParam [3 \]. originAirport "\]"): nie działa. – user278618

2

jeśli kod HTML jest

<input name="flightSearchParam[3].originAirport"> 

Następnie Selektor CSS dla niego będzie

css=input[name='flightSearchParam\[3\].originAirport'] 

trzeba uciec wspornik, który ma szczególne znaczenie dla selektorów CSS.

0

Wygląda na to, że RC nie tłumaczy sekwencji ucieczki. Polecam używanie atrybutów XPath. W twoim przypadku byłoby -

sel.is_element_present("//input[@name='flightSearchParam[3].originAirport']") 
1

Miałem podobny problem, który może uzyskać pewien wgląd w kierunku rozwiązania dla swojego problemu:

Firefox selen IDE wrócił ten cel podczas rejestracji:

css=input[name="keywords"]

prawidłowe argumentu selektor CSS uzyskać ten element okazał się być (selen 2,41):

solution = driver.find_element_by_css_selector('input[name="keywords"]')

Więc w twoim przypadku, to może działać:

css= 'input[name="flightSearchParam[3].originAirport"]' 
solution = driver.find_element_by_css_selector(css) 

Uwaga: w Pythonie selen, nigdy nie musiał uciec wsporniki, które wskazują indeksy ...