专栏首页自动化、性能测试Selenium系列(十) - 针对Select下拉框的操作和源码解读

Selenium系列(十) - 针对Select下拉框的操作和源码解读

如果你还想从头学起Selenium,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1680176.html

其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)

首先,将下面html代码保存到一个文件中

后续的代码小案例都是访问此html的<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>下拉框</title>
</head>
<body>


<select id="pro">
    <option value="gd">广东</option>
    <option value="hb">湖北</option>
    <option value="gj">北京</option>
</select>


<select id="city" multiple>
    <option value="gz">广州</option>
    <option value="wh">武汉</option>
    <option value="gj">北京</option>
</select>
</body>
</html>

注意

若select下拉框有 multiple 属性,则可以多选option,但这种情况不常见

关于下拉框的操作

  • 返回所有选项
  • 返回所有被选中的选项
  • 通过value属性选中or取消选中选项
  • 通过index索引选中or取消选中选项
  • 通过标签间文本选中or取消选中选项
  • 取消选中所有选项

返回选项&选中操作

# !/usr/bin/env python
# -*- coding: utf-8 -*-

"""
__title__  =
__Time__   = 2020/3/25 17:52
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/
"""
from time import sleep

from selenium.webdriver.support.select import Select
from selenium import webdriver

driver = webdriver.Chrome("../resources/chromedriver.exe")

# 将html文件更改为自己的路径
driver.get("file:///C:/下拉框.html")
driver.maximize_window()

# 找到select标签元素
pro = Select(driver.find_element_by_id("pro"))

# 返回所有选项
for option in pro.options:
    print(option.text)

# 返回所有被选中的选项
for option in pro.all_selected_options:
    print(option.text)

# 通过value选中
pro.select_by_value("bj")
sleep(1)

# 通过index选中
pro.select_by_index(1)
sleep(1)

# 通过标签文本选中
pro.select_by_visible_text("广东")

取消选中操作

# 找到id=city的下拉框
city = Select(driver.find_element_by_id("city"))

# 全选
for option in city.options:
    if not option.is_selected():
        city.select_by_visible_text(option.text)
sleep(1)

# 根据value取消选中
city.deselect_by_value("bj")
sleep(1)

# 根据index取消选中
city.deselect_by_index(0)
sleep(1)

# 根据标签文本选中
city.deselect_by_visible_text("武汉")
sleep(1)

# 全选
for option in city.options:
    if not option.is_selected():
        city.select_by_visible_text(option.text)
sleep(1)

# 取消选中所有选项
city.deselect_all()

知识点

取消操作只适用于添加了multiple的下拉框,否则会报错

    raise NotImplementedError("You may only deselect options of a multi-select")
NotImplementedError: You may only deselect options of a multi-select

Select源码解读

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)
        """

知识点

  • 实例化 需要传入 select 下拉框的 webelement

Select

  • 若传入 的 tag_name 不是 <select>..</select> 标签,则会抛出异常 UnexpectedTagNameException

webelement

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Cypress系列(22)- 可操作类型的命令 之 select()

    https://www.cnblogs.com/poloyy/category/1768839.html

    小菠萝测试笔记
  • Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成实战终极教程

    使用 Jenkins 镜像创建容器,并搭建 Python + Pytest +Allure 的自动化测试环境

    小菠萝测试笔记
  • Jenkins(2)- 更改插件源为国内源

    https://www.cnblogs.com/poloyy/category/1645399.html

    小菠萝测试笔记
  • Java和Python的Web开发

    在Java里面有一种服务端的软件组件技术,叫做Servlet,其实它的定位就是轻巧的小玩意,比如Java里面的applet也是类似的命名。Servlet能够动态...

    jeanron100
  • [android] 手机卫士自定义吐司

    继续在之前监听来电的服务AddressService里,添加成员方法MyToast()

    陶士涵
  • mongo数据库命令简单学习

    db.getCollection('product').update({status:"offline"},{$set:{status:"online"}},f...

    蓓蕾心晴
  • Big Data | 流处理?Structured Streaming了解一下

    上一篇文章里,总结了Spark 的两个常用的库(Spark SQL和Spark Streaming),可以点击这里进行回顾。其中,SparkSQL提供了两个AP...

    Sam Gor
  • WordPress有新评论微信提醒管理员

    沈唁
  • Android快速实现触摸移动的悬浮窗

    本文实例为大家分享了Android实现触摸移动的悬浮窗的具体代码,供大家参考,具体内容如下

    砸漏
  • 停车服务公众号存安全隐患,可能泄漏你的用车行踪

    近些年提供停车服务的微信公众号越来越多,虽然带来很大方便,但也可能存在潜在风险。近期有网友称,某停车服务公众号可随意绑定车牌,据此可以查询到相应车辆的停车记录。...

    FB客服

扫码关注云+社区

领取腾讯云代金券