自动建议在selenium python中选择输入匹配选择不起作用

时间:2018-01-27 16:21:39

标签: jquery python selenium

我已尝试过多种方法来获取自动完成功能以选择输入值但未成功。它只选择下拉列表中的第一个值。请帮忙解决这个问题。

first_field = Select(WebDriverWait(browser,20).until(EC.visibility_of_element_located(By.XPATH, "//*[@id='bdy']/div[4]/ul/li"))))
#option_select = (browser.find_elements_by_xpath( "//*[@id='bdy']/div[4]ul/li"))

for elm in first_field:
    if(elm.text == (campus_name)):

      elm.click()

WebDriverWait(browser, 20).until(EC.invisibility_of_element_located ((By.XPATH, "//*[@id='campus_result']")))

我正在为id:autoCampusId提供输入,并希望从下拉列表名称中选择,该名称与我的输入字符串匹配。

并在下拉列表中仅选择匹配的字符串输入。

Click here to view the source code screen shot

1 个答案:

答案 0 :(得分:0)

仅当下拉列表是由Select&amp ;;定义的HTML本机下拉列表时选项标签,您可以使用Select类。

您的自动建议列表不是原生下拉列表,它是一个css模拟下拉列表,因此您应该通过查找并单击它来将其作为按钮或文本字段进行操作。

选项1)直接点击想要的选项

def select_campus(campus_name):

    driver.find_element_by_css_selector('input#autoCampusId')
        .sendKeys(campus_name)

    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR , "div.ac_results li"))

    auto_suggest_list = driver.find_elements_by_css_selector('div.ac_results li')

    found = false;

    print '@' + campus_name.upper() + '@'
    for item in auto_suggest_list:
        print '#' + item.text.upper() + '#'
        print 'location: ' + item.location
        if(item.text.strip().upper() == campus_name.strip().upper()):
            print 'find matched option'
            item.click()
            found = true
            break

    if found == false :
        print 'Can not find campus: ' + campus_name

选项2)使用向下键移动到所需选项

from selenium.webdriver.common.keys import Keys

def select_campus(campus_name):

    input_ele = driver.find_element_by_css_selector('input#autoCampusId');
    input_ele.sendKeys(campus_name)

    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR , "div.ac_results li"))

    auto_suggest_list = driver.find_elements_by_css_selector('div.ac_results li')

    for item in auto_suggest_list:

        if(item.text.strip().upper() != campus_name.strip().upper()):
            input_ele.sendKeys(Keys.DOWN)
        else:
            input_ele.sendKeys(Keys.ENTER)
            break

提示:从HTML代码的屏幕截图中,div.ac_results不可见(样式属性中有display: none)。硒不能对隐形元素及其后代进行操作。