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 选择器中的括号 [?] 的问题的主要内容,如果未能解决你的问题,请参考以下文章

selenium-Python之定位下拉框选择

selenium-Python之定位下拉框选择

selenium-python元素定位技巧

Selenium-python 中的弹窗处理

selenium-Python2

selenium-Python2