2011-02-07 11 views
5

A continuación se muestra mi script, cuya verificación es elemento presente. Cuando doy este selector:Problema con los corchetes [?] En el selector css en Selenium-python

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

en selenio Ide me encontrar este elemento, pero cuando corro esta en selenio RC no puede encontrarlo. Creo que es un problema con los corchetes.

Lo que debo cambiar para encontrar este elemento por selenio rc?

lo ejecuto en Windows XP y Cultura Polaca

guión está listo para funcionar.

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

cuerpo para:

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

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

EDITAR

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

y encontrar este elemento. Pero, todavía no sé por qué css no funciona aquí:/

+0

Podría publicar su código html con el que desea hacer coincidir – karlcow

+0

Creo que sería mejor utilizar un selector que no sea CSS (¿XPath, quizás?) – rs79

Respuesta

0

Intenta escapar de los corchetes con barras invertidas.

+0

u "css = input [name = 'flightSearchParam [3 /]. originAirport' /]" doesn tampoco funciona, – user278618

+0

barras diagonales inversas (\\), no barras diagonales (/) ... – ThiefMaster

+0

lo siento, me refiero a sel.is_element_present (u "css = input [name = 'flightSearchParam [3 \]. originAirport' \]"): no funciona. – user278618

2

si el código HTML es

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

, el selector de CSS ya que será

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

Tienes que escapar del soporte que tiene un significado específico para selectores CSS.

0

Parece que RC no traduce la secuencia de escape. Yo recomendaría el uso de Atributos XPath. En su caso sería -

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

tuve un problema similar que se puede obtener alguna información hacia una solución para su problema:

Firefox Selenium IDE regresó este objetivo durante una grabación:

css=input[name="keywords"]

el argumento selector CSS correcto para obtener este elemento resultó ser (selenio 2,41):

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

Así, en su caso, esto podría funcionar:

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

Nota: en el selenio Python, nunca he necesitado para escapar de los soportes que indican los índices ...

Cuestiones relacionadas