Selenium处理单选项下拉框列表
写在前面
UI自动化测试中,经常会遇到下拉框列表选项,常见的下拉框列表有:单选项下拉框,多选项下拉框。
WebDriver提供了Select类来处理下拉框。 本文详细讲解如何使用Selenium处理单选项下拉框列表。
遍历所有选项并打印选项相关属性值
首先针对单选项下拉框列表进行遍历操作,这样我们就可以清楚地看到下拉框列表中都有哪些选项。然后再进一步对下拉框内容进行处理。为了更直观的演示处理效果,制作了一个html。单选项下拉框传送门(复制到浏览器打开):
https://www.testclass.cn/test_html/Sports_Single.html
代码如下所示:
#select.py
#www.testclass.cn
#Altumn
import time
from selenium import webdriverurl ="https://www.testclass.cn/test_html/Sports_Single.html"
driver=webdriver.Chrome()
driver.get(url)select = driver.find_element_by_name('Sports')
all_options=select.find_elements_by_tag_name("option")
for option in all_options:
print("选项显示的文本:",option.text)
print("选项值为:",option.get_attribute('value'))
option.click()
time.sleep(1)
#等待一下,演示效果;
time.sleep(3)
driver.quit()
执行结果:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '50006' 'c:\Users\WangXiao\Desktop\python\Untitled-24.py'
DevTools listening on ws://127.0.0.1:12416/devtools/browser/a4df0393-7ec7-4936-829c-02ae84fc03d4
选项显示的文本: 足球
选项值为: zuqiu
选项显示的文本: 篮球
选项值为: lanqiu
选项显示的文本: 排球
选项值为: paiqiu
选项显示的文本: 冰球
选项值为: bingqiu
选项显示的文本: 网球
选项值为: wangqiu
选项显示的文本: 垒球
选项值为: leiqiu
选项显示的文本: 台球
选项值为: taiqiu
选项显示的文本: 乒乓球
选项值为: pingpangqiu
选项显示的文本: 羽毛球
选项值为: yumaoqiu
选项显示的文本: 曲棍球
选项值为: qugunqiu
选项显示的文本: 橄榄球
选项值为: ganlanqiu
通过选项序号选择下拉框内容
WebDriver提供了Select类来处理下拉框,博主个人习惯处理思路如下:
1.先定位Select元素类;
2.然后循环打印出元素序号和对应的关键属性值;
3.根据元素序号(index)选择对应的下拉框内容;
需要注意:要求下拉框的选项必须要有index属性,例如index=”1”。
接下来详细介绍第一种下拉框选项选择方法:
#使用方法示例:
Select(driver.find_element_by_tag_name("select")).select_by_index(0)
同样,我们使用一个单项下拉框选择列表html进行演示,html传送门(复制到浏览器打开):
https://www.testclass.cn/test_html/Sports_Single.html
详细代码:
#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_Single.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))
#循环打印出选项序号和对应的选项属性;
for i in range(len(all_options)):
print("元素序号:" + str(i))
print(select_element.options[i].get_attribute("text"))
print(select_element.options[i].get_attribute("value")) #判断一下序号为1的元素是否可以选择,如果可以就选择;
if all_options[1].is_enabled():
#通过序号选择第二个元素,注意元素序号从0开始;
select_element.select_by_index(1)
#打印最后选择选项名称;
print("最后选择的内容是:",select_element.all_selected_options[0].text)#单选列表所以只能是0;
#等待一下,演示效果;
time.sleep(3)
driver.quit()
执行结果:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '56362' 'c:\Users\WangXiao\Desktop\python\Untitled-1111111111111111.py'
DevTools listening on ws://127.0.0.1:12432/devtools/browser/ca29f2a2-7b22-4c0b-b73a-e45bd1e6c218
列表选项总数: 11
元素序号:0足球
zuqiu
元素序号:1篮球
lanqiu
元素序号:2排球
paiqiu
元素序号:3冰球
bingqiu
元素序号:4网球
wangqiu
元素序号:5垒球
leiqiu
元素序号:6台球
taiqiu
元素序号:7乒乓球
pingpangqiu
元素序号:8羽毛球
yumaoqiu
元素序号:9曲棍球
qugunqiu
元素序号:10橄榄球
ganlanqiu
最后选择的内容是: 篮球
通过选项显示文本选择下拉框内容
第二种方法:通过选项显示文本选择下拉框内容。处理思路和上面一样,使用的方法不同而已。
需要注意:要求下拉框的选项必须要有text属性。
#使用方法示例:
Select(driver.find_element_by_tag_name("select")).select_by_visible_text("足球")
同样,我们使用上面所用的html:Sports_Single.html传送门(复制到浏览器打开):
https://www.testclass.cn/test_html/Sports_Single.html
代码如下所示:
#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_Single.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))
#循环打印出选项序号和对应的选项属性;
for i in range(len(all_options)):
print("元素序号:" + str(i))
print(select_element.options[i].get_attribute("text"))
print(select_element.options[i].get_attribute("value"))
#通过选项名称"足球"选择内容;
select_element.select_by_visible_text("足球")
#打印最后选择选项名称;
print("最后选择的内容是:",select_element.all_selected_options[0].text)#单选列表所以只能是0;
#等待一下,演示效果;
time.sleep(3)
driver.quit()
执行结果如下所示:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '51963' 'c:\Users\WangXiao\Desktop\python\Untitled-1111111111111111.py'
DevTools listening on ws://127.0.0.1:12761/devtools/browser/0c6d4f54-bea6-4d4c-89b4-4e1ac5f9b1ec
列表选项总数: 11
元素序号:0足球
zuqiu
元素序号:1篮球
lanqiu
元素序号:2排球
paiqiu
元素序号:3冰球
bingqiu
元素序号:4网球
wangqiu
元素序号:5垒球
leiqiu
元素序号:6台球
taiqiu
元素序号:7乒乓球
pingpangqiu
元素序号:8羽毛球
yumaoqiu
元素序号:9曲棍球
qugunqiu
元素序号:10橄榄球
ganlanqiu
最后选择的内容是: 足球
通过选项value值选择下拉框内容
第三种方法:通过value值选择下拉框内容。处理思路和上面一样,使用的方法不同而已。
需要注意:要求下拉框的选项必须要有value属性。
#使用方法示例:
Select(driver.find_element_by_tag_name("select")).select_by_value("ganlanqiu")
同样,我们使用上面所用的html:Sports_Single.html传送门(复制到浏览器打开):
https://www.testclass.cn/test_html/Sports_Single.html
代码如下所示:
#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_Single.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))
#循环打印出选项序号和对应的选项属性;
for i in range(len(all_options)):
print("元素序号:" + str(i))
print(select_element.options[i].get_attribute("text"))
print(select_element.options[i].get_attribute("value")) #通过选项名称"足球"选择内容;
select_element.select_by_value("ganlanqiu")
#打印最后选择选项名称;
print("最后选择的内容是:",select_element.all_selected_options[0].text)#单选列表所以只能是0;
#等待一下,演示效果;
time.sleep(3)
driver.quit()
执行结果如下所示:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '50960' 'c:\Users\WangXiao\Desktop\python\Untitled-1111111111111111.py'
DevTools listening on ws://127.0.0.1:12799/devtools/browser/6688cc27-d8fe-4404-9483-4ed70c81ee71
列表选项总数: 11
元素序号:0足球
zuqiu
元素序号:1篮球
lanqiu
元素序号:2排球
paiqiu
元素序号:3冰球
bingqiu
元素序号:4网球
wangqiu
元素序号:5垒球
leiqiu
元素序号:6台球
taiqiu
元素序号:7乒乓球
pingpangqiu
元素序号:8羽毛球
yumaoqiu
元素序号:9曲棍球
qugunqiu
元素序号:10橄榄球
ganlanqiu
最后选择的内容是: 橄榄球
断言单选列表选项值
以上内容对单选列表进行了内容选择,我们在做自动化测试的时候需要增加断言来判断是否选择成功。接下来我们就针对单选列表选项值进行断言。断言的方式有几种,下面演示的是其中一种方式。
同样,我们使用上面所用的html:Sports_Single.html传送门(复制到浏览器打开):
https://www.testclass.cn/test_html/Sports_Single.html
代码如下所示:
#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_Single.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))
#先定义一个列表选项值,如果想验证异常的情况,可以把这个列表中部分内容删除;
expect_option_List=['足球','篮球','排球','冰球','网球','垒球','台球','乒乓球','羽毛球','橄榄球','曲棍球']
#循环打印出选项序号和对应的选项属性;
for i in range(len(all_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()
执行结果如下所示:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '56410' 'c:\Users\WangXiao\Desktop\python\Untitled-1111111111111111.py'
DevTools listening on ws://127.0.0.1:12387/devtools/browser/13219229-d3ae-4f12-b4ce-1c1ee4a4af88
列表选项总数: 11
元素序号:0
足球 在期望的列表中存在,核对正确。
元素序号:1
篮球 在期望的列表中存在,核对正确。
元素序号:2
排球 在期望的列表中存在,核对正确。
元素序号:3
冰球 在期望的列表中存在,核对正确。
元素序号:4
网球 在期望的列表中存在,核对正确。
元素序号:5
垒球 在期望的列表中存在,核对正确。
元素序号:6
台球 在期望的列表中存在,核对正确。
元素序号:7
乒乓球 在期望的列表中存在,核对正确。