selenium自动化操作下拉列表
selenium自动化获取对象时,肯定会涉及到下拉列表,项目中遇到的下拉列表:通过select/option标签实现 或者ul/li标签实现,记录一下两种实现方式如何获取下拉列表的值
select/option标签
针对select标签类型的不能通过点击事件选择值,需要使用Select
模块,其中有三种选中值的方式
- select_by_index(index):通过下标选择
- select_by_value(value):通过option标签的value值来选择
- select_by_visible_text(text):通过option标签的文本内容来选择
举个例子
- 本地编写一个test.html文件,内容如下
<html>
<body>
<select name="cars" size="1" autofocus="Saab">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
<option value="volvo1">Volvo1</option>
<option value="saab1">Saab1</option>
<option value="fiat1">Fiat1</option>
<option value="audi1">Audi1</option>
<option value="volvo2">Volvo2</option>
<option value="saab2">Saab2</option>
<option value="fiat2">Fiat2</option>
<option value="audi2">Audi2</option>
<option value="volvo3">Volvo3</option>
<option value="saab3">Saab3</option>
<option value="fiat3">Fiat3</option>
<option value="audi3">Audi3</option>
<option value="volvo4">Volvo4</option>
<option value="abc">Saab4</option>
<option value="fiat4">Fiat4</option>
<option value="audi4">Audi4</option>
<option value="foo">Bar</option>
</select>
</body>
</html>
- 访问test.html,获取对应的值,代码如下
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
driver=webdriver.Chrome()
driver.get("file:///C:/Users/Administrator/Desktop/test.html")
select_elem=WebDriverWait(driver,10,0.5).until(ec.visibility_of_element_located((By.XPATH,'/html/body/select')))
x=Select(select_elem)
x.select_by_index(10)
x.select_by_value('foo')
x.select_by_visible_text('Audi4')
driver.quit()
ul/li标签
- 针对这类下拉列表使用点击事件就可以实现
- 对于下拉内容较多,需要滚动才显示的值,可以通过js实现
以csdn的分类专栏下拉为例子,需要选择下拉列表底部的robot framework
值
验证js是否能选中未显示的值
- 先打开f12,在console中通过js操作一下看能否选择到
robot framework
对象,如图操作
结论
可以看出即使下拉列表的值没有显示出来,通过js也可以选中
因此在编写代码的时候一样,先获取到robot framework
对象,再执行js进行点击
python代码实现
select_elem=WebDriverWait(driver, 5).until(
EC.element_to_be_clickable((By.XPATH, "//span[contains(.,'robot framework')]")))
driver.execute_script('arguments[0].click()', select_elem);