前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium处理单选项下拉框列表

Selenium处理单选项下拉框列表

作者头像
Altumn
发布2019-10-21 17:34:09
4K0
发布2019-10-21 17:34:09
举报

写在前面

UI自动化测试中,经常会遇到下拉框列表选项,常见的下拉框列表有:单选项下拉框,多选项下拉框。

WebDriver提供了Select类来处理下拉框。 本文详细讲解如何使用Selenium处理单选项下拉框列表。

遍历所有选项并打印选项相关属性值

首先针对单选项下拉框列表进行遍历操作,这样我们就可以清楚地看到下拉框列表中都有哪些选项。然后再进一步对下拉框内容进行处理。为了更直观的演示处理效果,制作了一个html。单选项下拉框传送门(复制到浏览器打开):

代码语言:javascript
复制
https://www.testclass.cn/test_html/Sports_Single.html

代码如下所示:

代码语言:javascript
复制
#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()

执行结果:

代码语言:javascript
复制
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”。

接下来详细介绍第一种下拉框选项选择方法:

代码语言:javascript
复制
#使用方法示例:
Select(driver.find_element_by_tag_name("select")).select_by_index(0)

同样,我们使用一个单项下拉框选择列表html进行演示,html传送门(复制到浏览器打开):

代码语言:javascript
复制
https://www.testclass.cn/test_html/Sports_Single.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_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()

执行结果:

代码语言:javascript
复制
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属性。

代码语言:javascript
复制
#使用方法示例:
Select(driver.find_element_by_tag_name("select")).select_by_visible_text("足球")

同样,我们使用上面所用的html:Sports_Single.html传送门(复制到浏览器打开):

代码语言:javascript
复制
https://www.testclass.cn/test_html/Sports_Single.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_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()

执行结果如下所示:

代码语言:javascript
复制
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属性。

代码语言:javascript
复制
#使用方法示例:
Select(driver.find_element_by_tag_name("select")).select_by_value("ganlanqiu")

同样,我们使用上面所用的html:Sports_Single.html传送门(复制到浏览器打开):

代码语言:javascript
复制
https://www.testclass.cn/test_html/Sports_Single.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_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()

执行结果如下所示:

代码语言:javascript
复制
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传送门(复制到浏览器打开):

代码语言:javascript
复制
https://www.testclass.cn/test_html/Sports_Single.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_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()

执行结果如下所示:

代码语言:javascript
复制
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
乒乓球 在期望的列表中存在,核对正确。
元素序号:8
羽毛球 在期望的列表中存在,核对正确。
元素序号:9
曲棍球 在期望的列表中存在,核对正确。
元素序号:10
橄榄球 在期望的列表中存在,核对正确。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试testclass 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档