下拉菜单输入时选择项目

2024-04-25 17:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试学习如何将Selenium与Python结合使用。我正在写一些代码来搜索www.kijiji.ca。我可以选择搜索字段并输入查询,但我不知道如何从列表中选择城市。在Selenium文档中,我找到了它的用法:

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

然而,当我尝试使用代码时,我得到一个错误,上面写着“Select只对Select元素起作用,对输入不起作用”

我再次查看了这个页面,看起来下拉菜单使用的是输入而不是选择。有谁能帮我找出如何使用硒选择这里的城市吗?你知道吗


Tags: 代码namefrom文档uisupport用法列表
2条回答

该页使用的自定义选择组件不能与seleniumSelect类交互。Select类只能用于默认的html select component。你知道吗

我们必须像手动步骤那样自动化

  1. 单击输入测试框
  2. 等待下拉列表出现。你知道吗
  3. 单击下拉列表中显示的相应值。你知道吗

在您的例子中,我们可以使用title属性或通过选择列表中锚定标记的显示值来选择下拉列表。你知道吗

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

如果元素是<select>标记,则可以使用Select类。参考seleniumhq,这里提到了为SELECT标记建模,提供了helper方法来选择和取消选择选项。

具体到您的元素,您可以尝试下面的代码作为手动我们模拟的行动,如点击。你知道吗

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

在我这边干得不错。如果你有任何疑问,请告诉我。你知道吗

相关问题 更多 >

    热门问题