测试过程中经常遇到下来菜单,比如说分页,每页显示的条数,以及语言的切换,很多时候经常是以下来菜单的形式展现,下面我们看一下selenium如何处理下来菜单。

首先selenium 很人性化的给提供了一个Select的模块,供处理下来菜单,首先我们需要导入Select,通过from selenium.webdriver.support.select import Select来导入。

Select中提供几个用于定位的option的方法,下面看一下具体的方法

主要把Select方法总结了一下分为三大类:

1.选择列表

  • select_by_index(self, index)      #以index属性值来查找匹配的元素并选择;
  • select_by_value(self, value)           #以value属性值来查找该option并选择;
  • select_by_visible_text(self, text)     #以text文本值来查找匹配的元素并选择;
  • first_selected_option(self)               #选择第一个option 选项 ;

为了测试以上的方法,从网上找的了一个简单的页面,来辅助测试

<html>
<body>
<form>
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat" selected="selected">Fiat</option>
<option value="audi">Audi</option>
</select>
</form>
</body>
</html>

针对按索引进行切换option属性示例如下。常用方法

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/select.html')
time.sleep(2) #默认option显示"Fiat"
S = Select(driver.find_element_by_name('cars')).select_by_index(0) #实例化Select,按索引选择option。索引以0开始
time.sleep(2) #切换后option显示"Volvo"
driver.quit()

针对按value进行切换option属性示例如下。常用方法

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/select.html')
time.sleep(2) #默认option显示"Fiat"
S = Select(driver.find_element_by_name('cars')).select_by_value('saab') #实例化Select,按value选择option。这里的value是标签的属性value,<option value="saab">Saab</option>
time.sleep(2) #切换后option显示"saab"
driver.quit()

针对按text文本进行切换option属性示例如下。常用方法

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/select.html')
time.sleep(2) #默认option显示"Fiat"
S = Select(driver.find_element_by_name('cars')).select_by_visible_text ('Audi') #实例化Select,text值是选择的我们下拉菜单时看到的值
time.sleep(2) #切换后option显示"Audi"
driver.quit()

使用first_selected_option(self) 来切换到第一个option,该方法与select_by_index(0)实现的效果相同,直接看一下代码执行效果,详细的就解释了

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/select.html')
time.sleep(2) #默认option显示"Fiat"
S = Select(driver.find_element_by_name('cars')).first_selected_option
time.sleep(2) #切换后option显示"Audi"
driver.quit()

2.清除选择列表

第一类我们讲解了如何选择列表,总共介绍了4种方法,但是既然可以选择我们就可以清除选择,而前三种取消方法可以与选择一一对应,下面我们看下如何清除选择

  • deselect_by_index(self, index)              #以index属性值来查找匹配的元素并取消选择;
  • deselect_by_value(self, value)              #以value属性值来查找该option并取消选择;
  • deselect_by_visible_text(self, text)   #以text文本值来查找匹配的元素并取消选择;
  • deselect_all(self)                                    #将所有选择清除;

因为按照上面的页面示例,我们切换完成以后是没有办法清除,下面我们来普及一下html <select> 标签的multiple 属性,multiple 属性规定可同时选择多个选项,可以把 multiple 属性与 size 属性配合使用,来定义可见选项的数目,所以我们会涉及到取消模式。

下面是不包含multiple 和 包含 multiple 的两种样式

<select> 标签样式

<select> 标签的multiple 属性样式

由于选择已经介绍的很详细,那么我们配合的选择和取消,写一个例子共同演示一下

辅助测试的页面html代码

<html>
<body>
<select name="cars" multiple="multiple" size="4">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</body>
</html>

首先我们通过index、value、text文本三种方式进行选择,然后再次按index、value、text 进行取消,最后遍历所有的option循环选择,最后全部取消。

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/select.html')
'''本示例中所有设置等待时间均为便于观察效果'''
time.sleep(1)
Select(driver.find_element_by_name('cars')).select_by_index(0) #以索引选择
time.sleep(1)
Select(driver.find_element_by_name('cars')).select_by_value('saab') #以value属性值选择
time.sleep(1)
Select(driver.find_element_by_name('cars')).select_by_visible_text('Mercedes') #以text 文本进行选择
time.sleep(2)
Select(driver.find_element_by_name('cars')).deselect_by_index(0)
time.sleep(1)
Select(driver.find_element_by_name('cars')).deselect_by_value('saab') #以value属性值取消选择
time.sleep(1)
Select(driver.find_element_by_name('cars')).deselect_by_visible_text('Mercedes') #以text 文本进行取消选择
time.sleep(1)
'''获取所有的option的text值,进行遍历通过text文本进行选择'''
Options = Select(driver.find_element_by_name('cars')).options #该方法下面会详细介绍,此处为了获取所有的options选项
for option in Options:
Select(driver.find_element_by_name('cars')).select_by_visible_text(option.text) #循环选择
time.sleep(1)
Select(driver.find_element_by_name('cars')).deselect_all()
time.sleep(1)
driver.quit()

代码逻辑不重要,重要的是看效果,如下显示

3.选项

虽然选项没有上面两大块那么重要,但是我们还需要简单的来看一下

  • options    #以列表形式返回属于此select标签的所有option
  • all_selected_options #全部选择了的option的列表
  • first_selected_option #第一个被选中的option元素如果select没有multiple值,此时获取值为当前选择的option

option 方法上面的例子已经使用过了,下面我们来介绍一下

def options(self):
'''以列表形式返回属于此select标签的所有option'''
return self._el.find_elements(By.TAG_NAME, 'option')

示例:

#-*- coding:utf-8 -*-

from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/select.html')
S = Select(driver.find_element_by_name('cars')).options #实例化Select,并且获取所有的options
for option in S: #遍历options
print(option.text) #获取option值
driver.quit()

我们结合着上面的例子把剩下的两种option方法一起演示下,下面在上面的例子进行改造一下,来看看会出现上面样子的效果

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/select.html')
'''本示例中所有设置等待时间均为便于观察效果'''
time.sleep(1)
Select(driver.find_element_by_name('cars')).select_by_index(0) #以索引选择
time.sleep(1)
Select(driver.find_element_by_name('cars')).select_by_value('saab') #以value属性值选择
time.sleep(1)
Select(driver.find_element_by_name('cars')).select_by_visible_text('Mercedes') #以text 文本进行选择
time.sleep(2)
options = Select(driver.find_element_by_name('cars')).all_selected_options #获取所有选择的option
'''这里我们遍历下看看那些值被选中'''
for option in options:
print('已经被选中option文本值:' + option.text)
Select(driver.find_element_by_name('cars')).deselect_by_index(0)
time.sleep(1)
Select(driver.find_element_by_name('cars')).deselect_by_value('saab') #以value属性值取消选择
time.sleep(1)
Select(driver.find_element_by_name('cars')).deselect_by_visible_text('Mercedes') #以text 文本进行取消选择
time.sleep(1)
'''获取所有的option的text值,进行遍历通过text文本进行选择'''
Options = Select(driver.find_element_by_name('cars')).options #该方法下面会详细介绍,此处为了获取所有的options选项
for option in Options:
Select(driver.find_element_by_name('cars')).select_by_visible_text(option.text) #循环选择
time.sleep(1)
'''因为遍历的过程中Volvo的索引为0,Volvo则被第一个选中'''
selectOption = Select(driver.find_element_by_name('cars')).first_selected_option
print (selectOption.text)
Select(driver.find_element_by_name('cars')).deselect_all()
time.sleep(1)
driver.quit()

我们把option添加以后,控制台打印了一下效果,看看是否是获取了对应的值

上述把Select模块中常用的方法介绍了,通过两种不同的下拉菜单,对所有的方法进行了介绍,我采用红色标记的方法是我们实际项目中经常会使用的,需要更加深刻的去理解。

python selenium-webdriver 下拉菜单处理 (九)的更多相关文章

  1. selenium.common.exceptions.ElementNotVisibleException: Message: element not visible处理方法:selenium针对下拉菜单事件的处理

    使用Selenium爬虫时,可能会遇到一些下拉菜单,动态加载,如果直接使用find_element_by_函数会报错,显示selenium.common.exceptions.ElementNotVi ...

  2. 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单

    目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...

  3. selenium定位下拉菜单好文

    http://www.cnblogs.com/nbkhic/archive/2011/10/23/2221726.html 定位下拉菜单

  4. Python+Selenium学习--下拉框处理

    场景 下拉框也是web 页面上非常常见的功能,webdriver 对于一般的下拉框处理起来也相当简单,要想定位下拉框中的内容,首先需要定位到下拉框:这样的二次定位 下拉框一般有以下两种方式: 鼠标移上 ...

  5. 11 Python+selenium对下拉框(select)进行处理

    [环境信息] Python3.4+IE+windows2008 [Select下拉框处理] 1.对于如图1的下拉框,可以用selenium自带的Select类进行选择. 2.定位示例: from se ...

  6. python selenium --处理下拉框

    下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项. drop_down.html <html&g ...

  7. selenium,unittest——下拉菜单操作,百度账号设置修改

    #encoding=utf-8from selenium import webdriverimport time,unittest, re,sysfrom HTMLTestRunner import ...

  8. [Selenium] 针对下拉菜单出现之后又立马消失的问题,通过Javascript改变元素的可见属性

    public void clickDateDropDownButton() { SeleniumUtil.jsClick(driver, page.getDateDropdownButtonOfInv ...

  9. selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

    selenium的用法 selenium2.0主要包含selenium IDE 和selenium webDriver,IDE有点类似QTP和LoadRunner的录制功能,就是firefox浏览器的 ...

  10. Python+selenium下拉菜单选项

    案例:在我要自学网登录页面选择要保留的时间 具体页面如图所示: 使用前端工具查看部分页面代码: <select class="loinp" name="Cookie ...

随机推荐

  1. U盘安装kali中CDROM问题解决

    1,采用ultraISO 制作Kali的安装盘,无法安装.U盘不能被识别. 2,改用win32diskimager,能识别了,但期间出现CDROM找不到. 3,采用网上方式,ALT+ F2,ls /d ...

  2. shell脚本登录数据库

    #!/bin/bashHOSTNAME="localhost" #数据库信息 PORT="3306" USERNAME="root" PAS ...

  3. dos2章

    讲FOR之前呢,咋先告诉各位新手朋友,如果你有什么命令不懂,直接在CMD下面输入: name /? 这样的格式来看系统给出的帮助文件,比如for /? 就会把FOR命令的帮助全部显示出来!当然许多菜鸟 ...

  4. openstack之neutron配额调整

        1. 前言   neutron在安装配置完成之后,openstack为了实现对所有tenant对网络资源的使用,针对neutron设置有专门的配额,以防止租户使用过多的资源,而对其他的tena ...

  5. 命令行窗口中使用pip安装第三方库成功之后,在pycharm中仍不能使用

    在学习廖老师的Python教程的时候,遇到命令行窗口中使用pip安装第三方库成功之后,在pycharm中仍不能使用的情况, 这种情况可能是由于在本地安装了多个Python版本的缘故(只是可能的情况之一 ...

  6. TP5 数据库迁移工具 migrate 教程

    第一步: 安装compose,不赘述,安装详情可百度或查看https://pkg.phpcomposer.com/#how-to-install-composer 第二步: 通过 composer   ...

  7. java实现截图功能

    package Jietu; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import j ...

  8. Vue-cli里面引用stylus遇到的问题总结

    1.stylus的调用 在vue-cli中用到stylus样式处理器的时候一定要引用两个对应的报stylus  stylus-loader 命令:cnpm install stylus stylus- ...

  9. java 基础代码

    /** * Created by y0n on 2017/4/17. * 1.输出控制台传递的默认参数 */public class JavaDay001_1 { public static void ...

  10. Python--错误SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

    Refer to:https://www.cnblogs.com/cyiner/archive/2011/09/18/2180729.html 用Python打开文件: fo=open("C ...