如何选择隐藏其标签的单选按钮

时间:2016-02-07 09:16:54

标签: python python-2.7 selenium

我正在学习python并试图在单选按钮上进行基本点击。目前选择了“返回”单选按钮,而我希望选择“单向”单选按钮。但是,当我运行我的代码时,它声明它无法找到“单向”单选按钮。

我想问一下,我需要做些什么才能找到收音机,但隐藏在各种其他标签下呢?

以下是基本代码:

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

3 个答案:

答案 0 :(得分:0)

由于元素id是唯一的,因此您实际上并不需要代码的第一行。使用:

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

这将选择所需的元素。但是,如果元素不在视图中(即在浏览器中不可见),则可能需要在单击之前滚动到该元素。为此,请使用:

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

这会将元素滚动到视图中。然后,您可以使用以下命令单击它:

element.click()

答案 1 :(得分:0)

使用JAVASCRIPT / jQuery点击.. 即使你的元素不可见,它也会起作用。

driver.executeScript(“$ x('your xpath')[0] .click());

答案 2 :(得分:0)

默认情况下,Selenium不支持与不可见/隐藏元素进行交互。您可以获取选项的所有文本/值,但不能与它们进行交互。

隐藏此元素或选项的原因有:用户可能不会选择它。例如,选项仅适用于高级用户。在这种情况下,执行验证检查的好的Web服务器将引发错误。

另一句话:

一般情况下,您可以使用选择元素的概念,如官方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