我已尝试过多种方法来获取自动完成功能以选择输入值但未成功。它只选择下拉列表中的第一个值。请帮忙解决这个问题。
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提供输入,并希望从下拉列表名称中选择,该名称与我的输入字符串匹配。
并在下拉列表中仅选择匹配的字符串输入。
答案 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
)。硒不能对隐形元素及其后代进行操作。