2011-02-07 17 views
5

Di seguito è il mio script che verifica è presente elemento. Quando do questo selettore:Problema con parentesi [?] Nel selettore css in selenio-pitone

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

di selenio Ide mi trovare questo elemento, ma quando ho eseguito questo di selenio rc non può trovarlo. Penso che sia un problema tra parentesi.

Cosa devo cambiare per trovare questo elemento con selenio rc?

lo eseguo in Windows XP e Cultura polacca

Script è pronto per essere eseguito.

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

Corpo per:

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

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

EDIT

lo cambio a sel.is_element_present("dom=document.getElementsByName('flightSearchParam[3].originAirport')[0]"):

e trovare questo elemento. Ma, ancora non so perché il css non funziona qui:/

+0

si potrebbe pubblicare il tuo codice html che vuoi abbinare – karlcow

+0

Penso che sarebbe meglio usare un selettore diverso da CSS (XPath, forse?) – rs79

risposta

0

Provare a scappare le parentesi con i backslash.

+0

u "css = input [nome = 'flightSearchParam [3 /]. originAirport' /]" doesn funzionano anche – user278618

+0

barre rovesciate (\\), non barre in avanti (/) ... – ThiefMaster

+0

scusate, voglio dire sel.is_element_present (u "css = input [nome = 'flightSearchParam [3 \]. originAirport' \]"): non funziona. – user278618

2

se il codice HTML è

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

Poi il selettore CSS perché sarà

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

Bisogna sfuggire alla staffa che ha un significato specifico per i selettori CSS.

0

Appare che RC non traduca la sequenza di escape. Consiglierei di usare gli attributi XPath. Nel tuo caso, sarebbe -

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

ho avuto un problema simile che potrebbe avere una certa comprensione verso una soluzione per il vostro problema:

Firefox Selenium IDE restituito questo obiettivo durante una registrazione:

css=input[name="keywords"]

l'argomento corretto selettore CSS per ottenere questo elemento si è rivelato (selenio 2.41):

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

Quindi, nel tuo caso, questo potrebbe funzionare:

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

Nota: in Python selenio, non ho mai avuto bisogno di fuggire parentesi che indicano gli indici ...