selenium对网页的下拉列表操作
在自动化测试的过程中,需要对网页中的下拉列表操作,对下拉列表的操作与操作其他控件稍有不同。Webdriver提供了一个Select类,用于与下拉列表和下拉菜单进行交互,它提供了丰富的功能和方法实现与用户的交互,主要有如下步骤:
1、导入Select类
from selenium.webdriver.support.select import Select
2、定位下拉列表
list_ele = driver.find_element(By.XPATH, "xpath表达式")
3、把定位的下拉列表封装为Select对象
s1 = Select(list_ele)
4、使用Select对象的方法,操作选项
s1.select_by_index(1)
select下拉列表操作的常用方法:
一、选中下拉列表:
根据索引值,索引从0开始》》》select_by_index(索引值)
根据选项的value属性》》》select_by_value("value属性值")
根据选项的文本值》》》select_by_visible_text("选项的文本")
二、获取下拉列表所有选项
list_option = []
for item in s1.options:
list_option.append(item.text)
print("下拉列表的所有选项是:", list_option)
三、取消选中的选项:
通过选项索引值取消,索引从0开始》》》deselect_by_index(索引值)
通过选项的value属性值取消》》》deselect_by_value("value属性值")
通过选项的文本值取消》》》deselct_by_visible_text("选项文本值")
取消所有选项》》》deselect_all()
四、获取所有已选中的选项:
for item in s1.all_selected_options:
print("被选中的选项是:", item.text)
五、获取第一个选中的选项:
first_selected = s1.first_selected_option:
print("第一个选中的选项是:"first_selected.text)
举个栗子:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Firefox()
test_url = "http://sahitest.com/demo/selectTest.htm"
driver.get(test_url)
driver.maximize_window()
time.sleep(5)
# 定位下拉列表的位置
list1 = driver.find_element(By.ID, "s1Id")
list2 = driver.find_element(By.ID, "s4Id")
# 实例化下拉列表
s1 = Select(list1)
s2 = Select(list2)
def ope_list1():
list_option = []
# 将下拉列表的所有选项放在list_option里
for item in s1.options:
list_option.append(item.text)
print("第一个下拉列表的所有选项是:", list_option)
# 判断下拉列表是否可以多选
if s1.is_multiple:
print("第一个下拉列表可以多选")
else:
print("第一个下拉列表不可以多选")
# 根据索引选中第二个列表选项
s1.select_by_index(1)
# 根据列表选项值选中第三个选项
s1.select_by_value("o2")
# 根据列表选项的文本选中第三个选项
s1.select_by_visible_text("o3")
def ope_list2():
list_option = []
for item in s2.options:
list_option.append(item.text)
print("第二个下拉列表的所有选项是:", list_option)
if s2.is_multiple:
print("第二个下拉列表可以多选")
else:
print("第二个下拉列表不可以多选")
s2.select_by_index(1)
# 根据列表选项值选中第三个选项
s2.select_by_value("o2val")
# 根据列表选项的文本选中第三个选项
s2.select_by_visible_text("o3")
print("第二个下拉列表选中的第一个选项是:", s2.first_selected_option.text)
all_selected_option = []
for item in s2.all_selected_options:
all_selected_option.append(item.text)
print("第二个下拉列表所有被选中的选项是:", all_selected_option)
# 取消第三个选项
s2.deselect_by_index(3)
# 取消所有选中选项
s2.deselect_all()
if __name__ == '__main__':
ope_list1()
ope_list2()
time.sleep(3)
driver.close()
运行成功