Python Selenium选择Bootstrap下拉菜单

时间:2015-08-07 00:59:30

标签: python twitter-bootstrap firefox selenium selenium-webdriver

如何使用Python Selenium从Bootstrap下拉列表中选择元素?下拉列表的HTML看起来像:

  <select type="select" class="selectpicker form-control" id="selFoo" >
        <option data-hidden="true">Make a selection</option>

        <option>Foo</option>
        <option>Bar</option>
        <option>Baz</option>

  </select>

我尝试过使用selenium Select模块,但收到的错误如下:

selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted 

3 个答案:

答案 0 :(得分:1)

如果您想从示例下拉列表中选择“Bar”,请执行以下操作:

browser = webdriver.Firefox(profile)
browser.get(hostname)
sleep(1) # wait for page to render    

dropdown = browser.find_element_by_css_selector("button[data-id=selFoo]")
dropdown.click()
sleep(1) # probably not necessary
option   = browser.find_element_by_css_selector("ul[role=menu] a[data-normalized-text='<span class=\"text\">Bar</span>']")
option.click()

仅在Firefox中测试。

答案 1 :(得分:0)

您可以使用Select的{​​{1}}模块。试试下面的代码: -

Selenium

有关详细信息,请参阅Select ...希望这有帮助

答案 2 :(得分:0)

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.select import Select

dropdown = Select(WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id("selFoo")))
dropdown.select_by_visible_text("Baz")

这应该有效。如果它没有,你可以尝试在这两行之前添加它。

WebDriverWait(driver, 10).until(lambda driver: driver.execute_script("return jQuery.active === 0"))

这将确保在jQuery完成之前没有发生任何事情。