Selenium-python 中的 css 选择器中的括号 [?] 的问题
Posted
技术标签:
【中文标题】Selenium-python 中的 css 选择器中的括号 [?] 的问题【英文标题】:Problem with brackets[?] in css selector in Selenium-python 【发布时间】:2011-06-22 17:28:26 【问题描述】:下面是我的脚本,它检查元素是否存在。当我给出这个选择器时:
css=input[name='flightSearchParam[3].originAirport']
在 Selenium Ide 中它找到我这个元素,但是当我在 selenium rc 中运行它时它找不到它。我认为这是括号的问题。
我必须改变什么才能通过 selenium 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'
编辑
我改成sel.is_element_present("dom=document.getElementsByName('flightSearchParam[3].originAirport')[0]"):
它找到了这个元素。但是,我仍然不知道为什么 css 在这里不起作用:/
【问题讨论】:
你能发布你想要匹配的html代码 我认为您最好使用 CSS 以外的选择器(也许是 XPath?) 【参考方案1】:如果 HTML 代码是
<input name="flightSearchParam[3].originAirport">
那么它的 CSS 选择器将是
css=input[name='flightSearchParam\[3\].originAirport']
您必须转义对 CSS 选择器具有特定含义的括号。
【讨论】:
【参考方案2】:我有一个类似的问题,可能会让您对解决问题的方法有所了解:
Firefox Selenium IDE 在录制期间返回此目标:
css=input[name="keywords"]
获取此元素的正确 CSS 选择器参数原来是 (selenium 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 Selenium 中,我从不需要转义指示索引的括号...
【讨论】:
【参考方案3】:尝试用反斜杠转义括号。
【讨论】:
u"css=input[name='flightSearchParam[3/].originAirport'/]" 也不起作用 抱歉,我的意思是 sel.is_element_present(u"css=input[name='flightSearchParam[3].originAirport']"):不起作用。【参考方案4】:看起来 RC 不翻译转义序列。我会推荐使用 XPath 属性。在你的情况下,它会是 -
sel.is_element_present("//input[@name='flightSearchParam[3].originAirport']")
【讨论】:
以上是关于Selenium-python 中的 css 选择器中的括号 [?] 的问题的主要内容,如果未能解决你的问题,请参考以下文章