Selenium处理单选项下拉框列表
写在前面
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)
自动化测试学习交流群:670250199
半夜更新,哇偶。