Selenium处理多选项下拉框列表

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

写在前面

上一篇文章讲解了单选项下拉框列表处理方式,点击链接跳转详情:Selenium处理单选项下拉框列表

单选项下拉框列表和多选项下拉框列表处理方法基本相同,都是通过使用WebDriver提供的Select类来处理下拉框。 本文详细讲解如何使用Selenium处理多选项下拉框列表。

通过\选项序号\选项名称\选项值\选择下拉框内容

多选框下拉框处理方式和单选框内容相同,处理思路如下:

1.先定位Select元素类;

2.然后循环打印出元素的关键属性值;

3.根据元素序号(index)选项名称(name)选项值(value)选择对应的下拉框内容;

需要注意:要求下拉框的选项必须要有相应的属性,例如Index属性,index=”1”。

本文演示选择三种方法组合方式进行元素选择,当然你可以选择其中一种方式进行多个选项选择。为了更直观的演示处理效果,制作了一个html。多选项下拉框传送门: Sports_Multiple.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_Multiple.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))
print("************************通过三种选择方式选择列表选项************************")
#1.通过序号选择第二个元素,注意元素序号从0开始;
select_element.select_by_index(1)
#2.通过选项名称"足球"选择内容;
select_element.select_by_visible_text("足球")
#3.通过选项值"paiqiu"选择内容;
select_element.select_by_value("paiqiu")
#打印最后选择选项名称;    
for options in select_element.all_selected_options:
    print("你最后多选的内容为:",options.text)
#等待一下,演示效果;
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' '57205' 'c:\Users\WangXiao\Desktop\python\Untitled-1111111111111111.py'

DevTools listening on ws://127.0.0.1:12715/devtools/browser/df30a194-03bb-4cab-9f0d-cbd6d32c3317
列表选项总数: 11
************************通过三种选择方式选择列表选项************************
你最后多选的内容为: 足球
你最后多选的内容为: 篮球
你最后多选的内容为: 排球

断言多选列表选项值

以上内容对多选列表进行了内容选择,我们在做自动化测试的时候需要增加断言来判断是否选择成功。接下来我们就针对多选列表选项值进行断言。断言的方式有几种,下面演示的是其中一种方式。

同样,我们使用上面所用的html:Sports_Multiple.html 传送门: Sports_Multiple.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_Multiple.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))
print("************************通过三种选择方式选择列表选项************************")
#1.通过序号选择第二个元素,注意元素序号从0开始;
select_element.select_by_index(1)
#2.通过选项名称"足球"选择内容;
select_element.select_by_visible_text("足球")
#3.通过选项值"paiqiu"选择内容;
select_element.select_by_value("paiqiu")
#打印最后选择选项名称;    
for options in select_element.all_selected_options:
    print("你最后多选的内容为:",options.text)
#断言先定义一个列表选项值,如果想验证异常的情况,可以把这个列表中部分内容删除;
expect_option_List=['足球','篮球','排球']
#循环打印出选项序号和对应的选项属性;
for i in range(len(select_element.all_selected_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' '52962' 'c:\Users\WangXiao\Desktop\python\Untitled-1111111111111111.py'

DevTools listening on ws://127.0.0.1:12643/devtools/browser/54b3ea64-4275-4ecc-a14d-c207907e7541
列表选项总数: 11
************************通过三种选择方式选择列表选项************************
你最后多选的内容为: 足球
你最后多选的内容为: 篮球
你最后多选的内容为: 排球
元素序号:0
足球 在期望的列表中存在,核对正确。
元素序号:1
篮球 在期望的列表中存在,核对正确。
元素序号:2
排球 在期望的列表中存在,核对正确。

通过\选项序号\选项名称\选项值\取消已选择的下拉框内容

上面内容,演示了如何选择下拉框内容,接下来演示一下如何取消已选择的下拉框内容。为了直观的演示效果,同样使用上面的Html页面,多选项下拉框传送门: Sports_Multiple.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_Multiple.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))
print("************************通过三种选择方式选择列表选项************************")
#1.通过序号选择第二个元素,注意元素序号从0开始;
select_element.select_by_index(1)
#2.通过选项名称"足球"选择内容;
select_element.select_by_visible_text("足球")
#3.通过选项值"paiqiu"选择内容;
select_element.select_by_value("paiqiu")
#打印最后选择选项名称;    
for options in select_element.all_selected_options:
    print("你最后多选的内容为:",options.text)
#等待一下,演示效果;
time.sleep(3)
print("************************取消已选择的列表选项************************")
#1.通过序号取消选择第二个元素,注意元素序号从0开始;
select_element.deselect_by_index(1)
#2.通过选项名称"足球"取消选择内容;
select_element.deselect_by_visible_text("足球")
#3.通过选项值"paiqiu"取消选择内容;
select_element.deselect_by_value("paiqiu")
#等待一下,演示效果;
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' '65183' 'c:\Users\WangXiao\Desktop\python\Untitled-1111111111111111.py'

DevTools listening on ws://127.0.0.1:12854/devtools/browser/e7cb7afe-6277-4dad-8f3a-f81c59efd332
列表选项总数: 11
************************通过三种选择方式选择列表选项************************
你最后多选的内容为: 足球
你最后多选的内容为: 篮球
你最后多选的内容为: 排球
************************取消已选择的列表选项************************

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

文章评论(2)

  • 王土豆

    看到这个文章,刚好想到我们系统也需要支持多选,感谢

    2019年4月18日
  • 11

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

    2019年3月28日