Проблема со скобками [?] В css-селекторе в Selenium-python - PullRequest
4 голосов
/ 07 февраля 2011

Ниже приведен мой скрипт, проверка которого на наличие элемента.Когда я даю этот селектор:

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

в Selenium Ide, он находит меня этим элементом, но когда я запускаю его в selenium 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'

РЕДАКТИРОВАТЬ

Я изменяю его на sel.is_element_present("dom=document.getElementsByName('flightSearchParam[3].originAirport')[0]"):

и нахожуэтот элемент.Но я до сих пор не знаю, почему здесь не работает css: /

Ответы [ 4 ]

2 голосов
/ 11 февраля 2011

, если код HTML

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

Тогда CSS-селектор для него будет

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

Вы должны выйти за скобки, которые имеют особое значение для селекторов CSS.

1 голос
/ 30 апреля 2014

У меня была похожая проблема, которая может дать вам некоторое представление о решении вашей проблемы:

Firefox Selenium 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 Selenium мне никогда не приходилось экранировать скобки, обозначающие индексы ...

0 голосов
/ 11 февраля 2011

Похоже, RC не транслирует escape-последовательность.Я бы порекомендовал использовать атрибуты XPath.В вашем случае это будет -

sel.is_element_present("//input[@name='flightSearchParam[3].originAirport']")
0 голосов
/ 07 февраля 2011

Попробуйте убрать скобки с обратной косой черты.

...