你穿过世事朝我走来 迈出的每一步都留下了一座空城 这时,一支从来世射出的毒箭命定了我 唯一的退路 --仓央嘉措
写在前面
上一篇文章讲解了单选项下拉框列表处理方式,点击链接跳转详情:Selenium处理单选项下拉框列表
单选项下拉框列表和多选项下拉框列表处理方法基本相同,都是通过使用WebDriver提供的Select类来处理下拉框。 本文详细讲解如何使用Selenium处理多选项下拉框列表。
通过选项序号选项名称选项值选择下拉框内容
多选框下拉框处理方式和单选框内容相同,处理思路如下:
1.先定位Select元素类;
2.然后循环打印出元素的关键属性值;
3.根据元素序号(index)选项名称(name)选项值(value)选择对应的下拉框内容;
需要注意:要求下拉框的选项必须要有相应的属性,例如Index属性,index=”1”。
本文演示选择三种方法组合方式进行元素选择,当然你可以选择其中一种方式进行多个选项选择。为了更直观的演示处理效果,制作了一个html。多选项下拉框传送门(复制到浏览器打开):
代码语言:javascript复制https://www.testclass.cn/test_html/Sports_Multiple.html
代码如下所示:
代码语言:javascript复制#select.py
#www.testclass.cn
#Altumn
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Selecturl ="https://www.testclass.cn/test_html/Sports_Multiple.html"
driver=webdriver.Chrome()
driver.get(url)
#获取select页面元素对象;
select_element=Select(driver.find_element_by_name('Sports'))
#获取所有选择项的页面元素对象;
all_options=select_element.options
#打印选项总数;
print("列表选项总数:",len(all_options))
print("************************通过三种选择方式选择列表选项************************")
#1.通过序号选择第二个元素,注意元素序号从0开始;
select_element.select_by_index(1)
#2.通过选项名称"足球"选择内容;
select_element.select_by_visible_text("足球")
#3.通过选项值"paiqiu"选择内容;
select_element.select_by_value("paiqiu")
#打印最后选择选项名称;
for options in select_element.all_selected_options:
print("你最后多选的内容为:",options.text)
#等待一下,演示效果;
time.sleep(3)
driver.quit()
执行结果如下所示:
代码语言:javascript复制PS C:UsersWangXiaoDesktoppython> cd 'c:UsersWangXiaoDesktoppython'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:UsersWangXiaoAppDataLocalProgramsPythonPython36python.exe' 'c:UsersWangXiao.vscodeextensionsms-python.python-2018.12.1pythonFilesptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '57205' 'c:UsersWangXiaoDesktoppythonUntitled-1111111111111111.py'
DevTools listening on ws://127.0.0.1:12715/devtools/browser/df30a194-03bb-4cab-9f0d-cbd6d32c3317
列表选项总数: 11
************************通过三种选择方式选择列表选项************************
你最后多选的内容为: 足球
你最后多选的内容为: 篮球
你最后多选的内容为: 排球
断言多选列表选项值
以上内容对多选列表进行了内容选择,我们在做自动化测试的时候需要增加断言来判断是否选择成功。接下来我们就针对多选列表选项值进行断言。断言的方式有几种,下面演示的是其中一种方式。
同样,我们使用上面所用的html:Sports_Multiple.html传送门(复制到浏览器打开):
代码语言:javascript复制https://www.testclass.cn/test_html/Sports_Multiple.html
代码如下所示:
代码语言:javascript复制#select.py
#www.testclass.cn
#Altumn
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Selecturl ="https://www.testclass.cn/test_html/Sports_Multiple.html"
driver=webdriver.Chrome()
driver.get(url)
#获取select页面元素对象;
select_element=Select(driver.find_element_by_name('Sports'))
#获取所有选择项的页面元素对象;
all_options=select_element.options
#打印选项总数;
print("列表选项总数:",len(all_options))
print("************************通过三种选择方式选择列表选项************************")
#1.通过序号选择第二个元素,注意元素序号从0开始;
select_element.select_by_index(1)
#2.通过选项名称"足球"选择内容;
select_element.select_by_visible_text("足球")
#3.通过选项值"paiqiu"选择内容;
select_element.select_by_value("paiqiu")
#打印最后选择选项名称;
for options in select_element.all_selected_options:
print("你最后多选的内容为:",options.text)
#断言先定义一个列表选项值,如果想验证异常的情况,可以把这个列表中部分内容删除;
expect_option_List=['足球','篮球','排球']
#循环打印出选项序号和对应的选项属性;
for i in range(len(select_element.all_selected_options)):
print("元素序号:" str(i))
#获取列表内容,输出text;
options_List=select_element.options[i].get_attribute("text")
#核对获取的内容是否与预期的列表内容相匹配;
if options_List in expect_option_List:
print(options_List,"在期望的列表中存在,核对正确。")
else:
print(options_List,"不存在期望的列表中,核对错误。")
#等待一下,演示效果;
time.sleep(3)
driver.quit()
执行结果如下:
代码语言:javascript复制PS C:UsersWangXiaoDesktoppython> cd 'c:UsersWangXiaoDesktoppython'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:UsersWangXiaoAppDataLocalProgramsPythonPython36python.exe' 'c:UsersWangXiao.vscodeextensionsms-python.python-2018.12.1pythonFilesptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '52962' 'c:UsersWangXiaoDesktoppythonUntitled-1111111111111111.py'
DevTools listening on ws://127.0.0.1:12643/devtools/browser/54b3ea64-4275-4ecc-a14d-c207907e7541
列表选项总数: 11
************************通过三种选择方式选择列表选项************************
你最后多选的内容为: 足球
你最后多选的内容为: 篮球
你最后多选的内容为: 排球
元素序号:0足球 在期望的列表中存在,核对正确。
元素序号:1篮球 在期望的列表中存在,核对正确。
元素序号:2排球 在期望的列表中存在,核对正确。
通过选项序号选项名称选项值取消已选择的下拉框内容
上面内容,演示了如何选择下拉框内容,接下来演示一下如何取消已选择的下拉框内容。为了直观的演示效果,同样使用上面的Html页面,多选项下拉框传送门(复制到浏览器打开):
代码语言:javascript复制https://www.testclass.cn/test_html/Sports_Multiple.html
代码如下所示:
代码语言:javascript复制#select.py
#www.testclass.cn
#Altumn
import time
from selenium
import webdriver
from selenium.webdriver.support.ui import Selecturl ="https://www.testclass.cn/test_html/Sports_Multiple.html"driver=webdriver.Chrome()
driver.get(url)#获取select页面元素对象;
select_element=Select(driver.find_element_by_name('Sports'))
#获取所有选择项的页面元素对象;
all_options=select_element.options
#打印选项总数;
print("列表选项总数:",len(all_options))
print("************************通过三种选择方式选择列表选项************************")
#1.通过序号选择第二个元素,注意元素序号从0开始;
select_element.select_by_index(1)
#2.通过选项名称"足球"选择内容;
select_element.select_by_visible_text("足球")
#3.通过选项值"paiqiu"选择内容;
select_element.select_by_value("paiqiu")
#打印最后选择选项名称;
for options in select_element.all_selected_options:
print("你最后多选的内容为:",options.text)
#等待一下,演示效果;time.sleep(3)
print("************************取消已选择的列表选项************************")
#1.通过序号取消选择第二个元素,注意元素序号从0开始;
select_element.deselect_by_index(1)
#2.通过选项名称"足球"取消选择内容;
select_element.deselect_by_visible_text("足球")
#3.通过选项值"paiqiu"取消选择内容;
select_element.deselect_by_value("paiqiu")
#等待一下,演示效果;
time.sleep(3)
driver.quit()
执行结果如下:
代码语言:javascript复制PS C:UsersWangXiaoDesktoppython> cd 'c:UsersWangXiaoDesktoppython'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:UsersWangXiaoAppDataLocalProgramsPythonPython36python.exe' 'c:UsersWangXiao.vscodeextensionsms-python.python-2018.12.1pythonFilesptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '65183' 'c:UsersWangXiaoDesktoppythonUntitled-1111111111111111.py'
DevTools listening on ws://127.0.0.1:12854/devtools/browser/e7cb7afe-6277-4dad-8f3a-f81c59efd332
列表选项总数: 11
************************通过三种选择方式选择列表选项************************
你最后多选的内容为: 足球
你最后多选的内容为: 篮球
你最后多选的内容为: 排球
************************取消已选择的列表选项************************