web自动化测试第12步:selenium中下拉框的解决方法(Select)

在之前,遇到下拉框的时候我们可以用两次点击来选择我们需要的选项,不过对于下拉框,我们的webdriver中有封装的Select包单独对于下拉框有一套处理的方法,我们可以来学习一下,然后在测试的时候根据不同的情况来选择需要哪儿种方法。

1.select包方法的使用示例以及定位方式

 web自动化测试第12步:selenium中下拉框的解决方法(Select)_第1张图片

select下拉框的定位

web自动化测试第12步:selenium中下拉框的解决方法(Select)_第2张图片

 

 

2.select包内的方法详解

1.获取option元素

options:获取包含select下拉框内所有option项element的列表

all_selected_options: 获取当前选中项element的列表

first_selected_option:获取所有下拉选项中的第一个选项的element(或者获取当前选中的这一项)

 

2.选择option

select_by_value(values):选择option标签中value属性为:values的选项

select_by_index(index_number):选择索引为index_number的选项(索引从0开始)

select_by_visible_text(text):选择option选项内容为:text的选项

 

3.复选select的情况(select标签中,multiple="multiple"时,即可多选的select选择框)

deselect_all: 取消所有已选择的选项

deselect_by_value(values):取消选择option标签中value属性为:values的选项

deselect_by_index(index_number):取消选择索引为index_number的选项(索引从0开始)

deselect_by_visible_text(text):取消选择option选项内容为:text的选项

 

3.实例验证(一)百度贴吧高级搜索下拉框

web自动化测试第12步:selenium中下拉框的解决方法(Select)_第3张图片

本条实例主要是获取选项元素和通过方法来选择某项option,代码如下

 

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

# 打开Chrome浏览器
driver = webdriver.Chrome()

# 进入百度高级搜索页
driver.get("http://tieba.baidu.com/f/search/adv")

# 获取select下拉框的元素
ele_select = driver.find_element_by_css_selector("select[name='sm']")

# 获取下拉框中所有选项元素(element)
options = Select(ele_select).options
print("所有选项元素的列表:%s" % options)
for i in options:
    print("元素对应的选项:%s"% i.text)

# 获取下拉框当前显示(选中)的元素(element)
options_selected = Select(ele_select).all_selected_options
print("-----------------------分隔符---------------------------")
print(options_selected)
for j in options_selected:
    print("当前选中的选项(默认项):%s" % j.text)

# 选择value值为2的选项
Select(ele_select).select_by_value("2")
sleep(1)

# 输出默认项(当前选中项)
now = Select(ele_select).first_selected_option
print(now.text)

 

 

4.实例验证(二):多选multiple选择框

我们把我们自己写的表单信息给写入到页面上,使用菜鸟教程在线代码运行工具生成html页面,然后再进行多选select框的验证实验。

web自动化测试第12步:selenium中下拉框的解决方法(Select)_第4张图片

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

# 打开浏览器,进入演示页面
driver = webdriver.Chrome()
driver.get("https://www.runoob.com/runcode")

# 定位输入框文本域
ele_textarea = driver.find_element_by_css_selector("#codeinp")

# 清空文本域
ele_textarea.clear()

# 输入多选下拉框的演示源码 (multiple="multiple\")
texts = " " \
        "
" ele_textarea.send_keys(texts) # 点击提交代码 submit_button = driver.find_element_by_css_selector("#btrun") submit_button.click() sleep(2) # 定位frame和select元素 all_handles = driver.window_handles driver.switch_to.window(all_handles[1]) ele_select = driver.find_element_by_css_selector("body > form > select") # 选择全部的选项(多选) Select(ele_select).select_by_index(0) sleep(1) Select(ele_select).select_by_index(1) sleep(1) Select(ele_select).select_by_index(2) sleep(1) Select(ele_select).select_by_index(3) sleep(1) # 取消选择第一项选项(页面上可以观察到变化) Select(ele_select).deselect_by_index(0) # 输出当前选择的第一项 now = Select(ele_select).first_selected_option print(now.text)


5.源码展示

 

class Select(object):

    def __init__(self, webelement):
        """
        Constructor. A check is made that the given element is, indeed, a SELECT tag. If it is not,
        then an UnexpectedTagNameException is thrown.

        :Args:
         - webelement - element SELECT element to wrap

        Example:
            from selenium.webdriver.support.ui import Select \n
            Select(driver.find_element_by_tag_name("select")).select_by_index(2)
        """
        if webelement.tag_name.lower() != "select":
            raise UnexpectedTagNameException(
                "Select only works on