2011-02-07 30 views
5

以下は、要素が存在する私のスクリプトです。私はこのセレクタ与えるとき:セレンIDEでSelenium-pythonのCSSセレクタの角括弧[?]の問題

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

をそれが私にこの要素を見つけることが、私はセレンのrcでこれを実行すると、それはそれを見つけることができません。私はそれが大括弧で問題だと思う。

この要素を見つけるには、セレンrcで何を変更する必要がありますか?

Windows XPとポーランド文化で実行します。

スクリプトを実行する準備ができました。

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

ボディ用:

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

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

EDIT

私はsel.is_element_present("dom=document.getElementsByName('flightSearchParam[3].originAirport')[0]"):

に変更し、それがこの要素を見つけます。しかし、私はまだCSSがここではうまくいかない理由をまだ知りません:/

+0

あなたを投稿することができあなたが一致させたいhtmlコード – karlcow

+0

CSS(XPath、多分?)以外のセレクタを採用する方が良いと思います。 – rs79

答えて

0

ブラケットをバックスラッシュでエスケープしてみてください。

+0

"css = input [name = 'flightSearchParam [3 /]。originAirport' /]" doesn – user278618

+0

バックスラッシュ(\\)ではなく、スラッシュ(/)... – ThiefMaster

+0

申し訳ありません。is_element_present(u "css = input [name = 'flightSearchParam [3 \]。originAirport' \]"):動作しません。 – user278618

2

HTMLコードが

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

されている場合は、そのためのCSSセレクタは、あなたがCSSセレクタのために特定の意味を持っているブラケットをエスケープする必要が

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

になります。

0

RCはエスケープシーケンスを翻訳していないようです。 XPath属性の使用をお勧めします。あなたのケースでは、それは次のようになります -

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

私はあなたの問題の解決に向けたいくつかの洞察を得ることが同様の問題を持っていた:

FirefoxのセレンIDEは、録画中にこの目標を返さ:

この要素を取得するcss=input[name="keywords"]

正しいCSSセレクタ引数は(セレン2.41)であることが判明:

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

だから、あなたの場合には、これはうまくいくかもしれない:

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

注:Pythonのセレンに、私はインデックスを示す括弧をエスケープするために必要なことがありません...