2016-02-07 2 views
1

Я изучаю python и пытаюсь сделать основной щелчок по переключателю. В настоящий момент выбран переключатель «return», и вместо этого я хочу выбрать «односторонний» переключатель. Тем не менее, когда я запускаю свой код, он заявляет, что не может найти переключатель «в одну сторону».Как выбрать переключатель, где его тэг скрыт

Я хочу спросить, что мне нужно сделать, чтобы найти радио, но это скрыто под другими другими тегами?

Ниже основной код:

element = driver.find_element_by_xpath("//*[contains(@class, 'option')]") 
one_way = element.find_element_by_id('one-way').click() 

Обновленный код (еще не работает):

from selenium import webdriver 
    from selenium.common.exceptions import NoSuchElementException 
    from selenium.webdriver import ActionChains 
    from selenium.webdriver.common.by import By 
    from selenium.webdriver.support.select import Select 
    from selenium.webdriver.support.ui import WebDriverWait 
    from selenium.webdriver.support import expected_conditions as EC 

    driver = webdriver.Firefox() 
    driver.maximize_window() 
    driver.get("https://xxxxx/xxx/") 

    wait = WebDriverWait(driver, 10) 
    actions = ActionChains(driver) 

    # wait for the page to load 
    wait.until(EC.presence_of_element_located((By.ID, "search-form-content"))) 

    # fill out the form 

    element = driver.find_element_by_id('one-way') 
    driver.execute_script('return arguments[0].scrollIntoView();', element) 
    element.click() 

    # previously just tried driver.find_element_by_id('one-way').click() and #one_way = driver.find_element_by_xpath("//div[@class_name='carat']/div[@class_name='option']/input[@id='one-way']").click() 

ответ

0

Взаимодействуя с невидимыми/скрытыми элементами не поддерживается селеном по-умолчанию Вы можете извлечь все тексты/значение параметров, но не может взаимодействовать с ними

..

Существует good Причина, по которой этот элемент или опция скрыта: пользователь не может ее выбрать. Например, опция должна быть доступна только для пользователей премиум-класса. В этом случае хороший веб-сервер, который проверяет проверку, вызовет ошибку.

Еще одно замечание:

В общем, вы можете использовать идею о Select-Element, как описано на официальной документации Selenium (для видимых элементов):

select = driver.find_element_by_tag_name("select") 
allOptions = select.find_elements_by_tag_name("option") 
for option in allOptions: 
    print "Value is: " + option.get_attribute("value") 
    option.click() 

http://www.seleniumhq.org/docs/03_webdriver.jsp

+0

Поскольку вы упомянули о премиальных пользователях, это звучит как очень законный тестовый тест, чтобы вы * сделали * подтверждение этого на стороне сервера, даже если клиент теряет со скрытой опцией. – ThiefMaster

0

Поскольку элемент id уникален, вы на самом деле не требуют первой строке код. Использование:

element = driver.find_element_by_id('one-way') 

Это выберет нужный элемент. Однако, если элемент не отображается (т. Е. Не отображается в браузере), вам может потребоваться прокрутить элемент до щелчка. Для этого используйте:

driver.execute_script('return arguments[0].scrollIntoView();', element) 

Это прокрутит элемент на виду. После этого вы можете нажать его с помощью:

element.click() 
+0

Это что я пробовал в первый раз, но он заявил об этом как об ошибке: «ElementNotVisibleException: Сообщение: элемент в настоящее время не виден и поэтому не может взаимодействовать с« – BruceyBandit

+0

». похоже, тоже работает. Я дам вам URL-адрес сети, чтобы вы могли видеть, что я пытаюсь сделать. https://reservations.jet2.com/mobile/. Когда открывается страница, просто нажмите кнопку «Один путь». Я поставил свой полный текущий код (включая ваш пример) в вопрос – BruceyBandit

+0

текущей ошибки при попытке вашего кода: WebDriverException: Message: this.getChromeWindowFromDocumentWindow (...) undefined – BruceyBandit

0

Использование JAVASCRIPT/JQuery нажмите .. Это будет работать, даже если ваш элемент не виден ..

driver.executeScript ("$ х ('ваш XPath «) [0] .click());