当菜单使用输入而不是选择时,从下拉菜单中选择一个项目

时间:2018-10-13 03:37:19

标签: python selenium

我正在尝试学习如何在Python中使用Selenium。我正在编写一些将在www.kijiji.ca上运行搜索的代码。我可以选择搜索字段并输入查询,但是我不知道如何从列表中选择城市。在Selenium文档中,我发现它的使用位置:

from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name('name'))

但是,当我尝试使用代码时,出现错误消息:“选择仅适用于选择元素,不适用于输入”

我再次检查了页面,似乎下拉菜单使用了输入而不是选择。有人可以帮我弄清楚如何使用Selenium在这里选择城市吗?

2 个答案:

答案 0 :(得分:0)

如果您的元素是<select>标记,则可以使用Select类。请参阅seleniumhq,其中提到了为SELECT标记建模,提供了用于选择和取消选择选项的辅助方法。

特定于您的元素,您可以尝试下面的代码,因为我们手动模拟了点击之类的动作。

driver.find_element_by_id("SearchLocationPicker").click()
driver.find_element_by_css_selector("li a[title='Manitoba']").click()
driver.find_element_by_css_selector("li a[title='Flin Flon']").click()

我的工作很好。让我知道您是否有任何疑问。

答案 1 :(得分:0)

该页面使用了不能与硒Select类进行交互的自定义​​选择组件。 Select类只能用于默认的html select component

我们必须按照手动步骤进行操作,

  1. 点击输入测试框
  2. 出现对下拉列表的等待。
  3. 单击相应的值,该值将显示在下拉列表中。

对于您而言,我们可以选择带有标题属性的下拉列表,也可以通过选择列表中锚标记的显示值来选择下拉列表。

 <a  title="Territories">Territories</a>

def select_by_title(value):
    # click the input component
    driver.find_element_by_css_selector('input#SearchLocationPicker"]').send_keys(value) 

    # Wait for the value to appear in dropdown.
    wait = WebDriverWait(driver, 60)
    element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#SearchLocationPicker~div>ul>li>a[title="'+value+'"')))

    # Click the element 
    element.click()

def select_by_display_value(value):
    driver.find_element_by_css_selector('#SearchLocationPicker"]').send_keys(value) 
    wait = WebDriverWait(driver, 60)
    element = wait.until(EC.visibility_of_element_located((By.XPATH, '//input[@id="SearchLocationPicker"]/following-sibling::div/ul/li/a[text() = "'+value+'"]')))
    element.click()