在项目测试中遇到了下拉框选择的控件,来总结下如何使用select选择下拉框:

下图是Select类的初始化描述,意思是,给定元素是得是select类型,不是就抛异常。接下来给了例子:要操作这个select,先要定位到,然后再通过select_by_index 选择下拉框

  1.  
  1. 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.
  2.  
  3. :Args:
    - webelement - element SELECT element to wrap
  4.  
  5. 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 <select> elements, not on <%s>" %
    webelement.tag_name)
    self._el = webelement
    multi = self._el.get_attribute("multiple")
    self.is_multiple = multi and multi != "false"
  1.  

1、select_by_value:

  1. 看下代码:
  1. def select_by_value(self, value):
  2. """Select all options that have a value matching the argument. That is, when given "foo" this
  3. would select an option like:
  4.  
  5. <option value="foo">Bar</option>
  6.  
  7. :Args:
  8. - value - The value to match against
  9.  
  10. throws NoSuchElementException If there is no option with specisied value in SELECT
  11. """
  12. css = "option[value =%s]" % self._escapeString(value)
  13. opts = self._el.find_elements(By.CSS_SELECTOR, css)
  14. matched = False
  15. for opt in opts:
  16. self._setSelected(opt)
  17. if not self.is_multiple:
  18. return
  19. matched = True
  20. if not matched:
  21. raise NoSuchElementException("Cannot locate option with value: %s" % value)

就是说使用这个方法,下拉框属性需要有value,如果选项中不具有指定值的项,就抛异常。例如:

  1.  
  1.  
  1. 2select_by_index
    看下代码:
  1. def select_by_index(self, index):
  2. """Select the option at the given index. This is done by examing the "index" attribute of an
  3. element, and not merely by counting.
  4.  
  5. :Args:
  6. - index - The option at this index will be selected
  7.  
  8. throws NoSuchElementException If there is no option with specisied index in SELECT
  9. """
  10. match = str(index)
  11. for opt in self.options:
  12. if opt.get_attribute("index") == match:
  13. self._setSelected(opt)
  14. return
  15. raise NoSuchElementException("Could not locate element with index %d" % index)

这个是通过元素的“index”属性来完成

  1.  
  2. 3select_by_visible_text
  1. 看下代码:
  1.  
  1. def select_by_visible_text(self, text):
  2. """Select all options that display text matching the argument. That is, when given "Bar" this
  3. would select an option like:
  4.  
  5. <option value="foo">Bar</option>
  6.  
  7. :Args:
  8. - text - The visible text to match against
  9.  
  10. throws NoSuchElementException If there is no option with specisied text in SELECT
  11. """
  12. xpath = ".//option[normalize-space(.) = %s]" % self._escapeString(text)
  13. opts = self._el.find_elements(By.XPATH, xpath)
  14. matched = False
  15. for opt in opts:
  16. self._setSelected(opt)
  17. if not self.is_multiple:
  18. return
  19. matched = True
  20.  
  21. if len(opts) == 0 and " " in text:
  22. subStringWithoutSpace = self._get_longest_token(text)
  23. if subStringWithoutSpace == "":
  24. candidates = self.options
  25. else:
  26. xpath = ".//option[contains(.,%s)]" % self._escapeString(subStringWithoutSpace)
  27. candidates = self._el.find_elements(By.XPATH, xpath)
  28. for candidate in candidates:
  29. if text == candidate.text:
  30. self._setSelected(candidate)
  31. if not self.is_multiple:
  32. return
  33. matched = True
  34.  
  35. if not matched:
  36. raise NoSuchElementException("Could not locate element with visible text: %s" % text)
  1.  通过选择文本来匹配,然后给出了例子。看下我的例子:
  2.  

我的代码:

  1. stafftype_loc = (By.XPATH, "//select[@ng-model='Invite.type']")
  2.  
  3. find_element(*self.stafftype_loc).send_keys(stftype)
  1.  
  1.  

【selenium】基于python语言,如何用select选择下拉框的更多相关文章

  1. selenium select 选择下拉框

    实战百度首页设置,浏览偏好设置. 打开首页,在非登录的情况下,查看分析页面元素,我们可以看到,我们首先要点击的是设置, 接着点击,搜索设置, 然后select选择下拉框. select_by_inde ...

  2. Vue.js中使用select选择下拉框

    在Vue.js中使用select选择下拉框有两种方法: 第一种: Add.html: <select v-model="sysNotice.noticeType" id=&q ...

  3. select change下拉框改变事件 设置选定项,禁用select

    select change下拉框改变事件 设置选定项,禁用select 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...

  4. selenium 难定位元素,时间插件,下拉框定位,string

    1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ...

  5. jq select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性

    select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性 $("#IsRecommend").change(function ...

  6. selenium 显示等待wait.until 常用封装 及下拉框的选择操作等

    from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait a ...

  7. selenium - Select类 - 下拉框

    WebDriver提供了Select类来处理下拉框. 如百度搜索设置的下拉框,如下图: from selenium import webdriver from selenium.webdriver.s ...

  8. Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载

    元素定位及其他操作 0.常见的识别元素的方法是什么? driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...

  9. selenium如何随机选取省份和城市的下拉框的值

    1.原始需求,选择省份后,相应的城市会自动加载 2.思路 a.获取下拉框的所有元素个数 b.随机点击0-元素个数之间的某个值 3.代码实现 Random random = new Random(); ...

随机推荐

  1. pytest_前置后置

    今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈 这次总结主要涉及到了以下几点: 1.unittest中的setUp.tearDown.setUpClass.t ...

  2. 简单的深度神经网络实现——使用PyTorch

    使用的数据集是MNIST,预期可以达到98%左右的准确率. 该神经网络由一个输入层,一个全连接层结构的隐含层和一个输出层构建. 1.配置库和配置参数 import torch import torch ...

  3. AVX 指令详解 ,还有SSE指令

    https://blog.csdn.net/fengbingchun/article/details/23598709 本人从来不复制的,自己看!.

  4. Linux---基本目录与文件命令

    一.目录 1.显示工作目录命令pwd 2.改变工作目录命令cd 3.创建目录命令mkdir 二.文件 1.创建空文件命令touch 2.显示文件列表ls 3.复制文件或目录命令cp 4.删除文件或目录 ...

  5. echarts之--柱状图-%显示

    测试地址 https://www.echartsjs.com/examples/zh/editor.html?c=bar-tick-align var option = { title: { text ...

  6. python hash 哈希值

    自增知识点 1,哈希 什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects). 哈希有啥作用? 它是一个将大体量数据转化 ...

  7. explain慢SQL分析解释

    使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是表结构的性能瓶颈. 使用方式:Explain+SQL语句 执行计划包含的信 ...

  8. 【使用篇二】SpringBoot热部署(11)

    热部署有三种方式: SpringLoader 插件 DevTools 工具 安装JRebel插件 注意:热部署的功能依赖于工具的自动编译,Eclipse-->Build Automaticall ...

  9. Git安装(一)

    1. 下载Git 官网地址:https://git-scm.com/downloads 这里选择下载Git-2.23.0-64-bit.exe 2. 安装 安装完成

  10. openlayers绘制点,线,圆等

    由于我的业务需求是可以在底图上进行一些操作,比如绘制电子围栏等功能,于是需要使用openlayers中的画笔功能,接下来开始一波操作 还是上一篇的html页面, 直接上代码 <!doctype ...