Selenium处理单选项下拉框列表

2019年1月21日 2.57k 次阅读 3 条评论 2 人点赞

写在前面

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

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

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

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

代码如下所示:

#select.py
#www.testclass.cn
#Altumn

import time
from selenium import webdriver

url ="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传送门:Sports_Single.html[请点点我]

详细代码:

#select.py
#www.testclass.cn
#Altumn

import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select

url ="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传送门:Sports_Single.html[请点点我]

代码如下所示:

#select.py
#www.testclass.cn
#Altumn

import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select

url ="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传送门:Sports_Single.html[请点点我]
代码如下所示:

#select.py
#www.testclass.cn
#Altumn

import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select

url ="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传送门:Sports_Single.html[请点点我]

代码如下所示:

#select.py
#www.testclass.cn
#Altumn

import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select

url ="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
橄榄球 在期望的列表中存在,核对正确。

风里云里,我在这里等你!

文章评论(3)

  • 11

    自动化测试学习交流群:670250199

    2019年3月28日
  • 无名

    半夜更新,哇偶。

    2019年1月21日