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
乒乓球 在期望的列表中存在,核对正确。
元素序号:8
羽毛球 在期望的列表中存在,核对正确。
元素序号:9
曲棍球 在期望的列表中存在,核对正确。
元素序号:10
橄榄球 在期望的列表中存在,核对正确。

本文分享自微信公众号 - 软件测试testclass(testclass_cn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券