http://www.testclass.net/  测试教程网,专业的selenium 学习网站。

本节要解决的问题:

如何定位一组元素?

场景

从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,

这时候就需要使用findElements方法。

定位一组对象一般用于以下场景:

· 批量操作对象,比如将页面上所有的checkbox都勾上

· 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>Checkbox</title><script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" /><script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script></head><body><h3>checkbox</h3><div class="well"><form class="form-horizontal"><div class="control-group"><label class="control-label" for="c1">checkbox1</label><div class="controls"><input type="checkbox" id="c1" /></div></div><div class="control-group"><label class="control-label" for="c2">checkbox2</label><div class="controls"><input type="checkbox" id="c2" /></div></div><div class="control-group"><label class="control-label" for="c3">checkbox3</label><div class="controls"><input type="checkbox" id="c3" /></div></div>    <div class="control-group"><label class="control-label" for="r">radio</label><div class="controls"><input type="radio" id="r1" /></div></div><div class="control-group"><label class="control-label" for="r">radio</label><div class="controls"><input type="radio" id="r2" /></div></div></form></div></body>
</html>

将这段代码保存复制到记事本中,将保存成checkbox.html文件。(注意,这个页面需要和我们的自动化脚本放在同一个目录下)

第一种方法:

通过浏览器打个这个页面我们看到三个复选框和两个单选框。下面我们就来定位这三个复选框。

# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import osdr = webdriver.Firefox()
file_path =  'file:///' + os.path.abspath('checkbox.html')
dr.get(file_path)# 选择页面上所有的input,然后从中过滤出所有的checkbox并勾选之
inputs = dr.find_elements_by_tag_name('input')
for input in inputs:if input.get_attribute('type') == 'checkbox':input.click()
time.sleep(2)dr.quit()

你可以试着把input.get_attribute('type') == 'checkbox' 中的checkbox 变成radio ,那这个脚本定位的会是两个单选框。

第二种定位方法:

# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import osdr = webdriver.Firefox()
file_path =  'file:///' + os.path.abspath('checkbox.html')
dr.get(file_path)# 选择所有的checkbox并全部勾上
checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:checkbox.click()
time.sleep(2)# 打印当前页面上有多少个checkbox
print len(dr.find_elements_by_css_selector('input[type=checkbox]'))
time.sleep(2)dr.quit()

第二种写法与第一种写法差别不大,都是通过一个循环来勾选控件;如果你学过上一章的话,细心的你一定发现用的定位函数不一样,

第一种用的name ,第二种用的CSS 。

 如何去掉勾选:

还有一个问题,有时候我们并不想勾选页面的所有的复选框(checkbox),可以通过下面办法把最后一个被勾选的框去掉。如下:

# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import osdr = webdriver.Firefox()
file_path =  'file:///' + os.path.abspath('checkbox.html')
dr.get(file_path)# 选择所有的checkbox并全部勾上
checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:checkbox.click()
time.sleep(2)# 把页面上最后1个checkbox的勾给去掉
dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
time.sleep(2)dr.quit()

其实,去掉勾选表也逻辑也非常简单,就是再次点击勾选的按钮。可能我们比较迷惑的是如何找到“最后一个”按钮。pop() 可以实现这个功能。

好吧!在web自动化的学习过程中,我们必须要知道一些前端的东西,这里扩展一下:

http://www.w3school.com.cn/js/jsref_pop.asp

尝试

把find_elements_by_css_selector('input[type=checkbox]').pop().click() 中的checkbox 变成radio 会是什么效果,自己尝试一下吧!

--------------------------

学习更多selenium 内容:

「功能测试自动化」汇总

转载于:https://www.cnblogs.com/fnng/p/3190966.html

轻松自动化---selenium-webdriver(python) (四)相关推荐

  1. Selenium WebDriver + python 自动化测试框架

    目标 组内任何人都可以进行自动化测试用例的编写 完全分离测试用例和自动化测试代码,就像写手工测试用例一下,编写excel格式的测试用例,包括步骤.检查点,然后执行自动化工程,即可执行功能自动化测试用例 ...

  2. selenium webdriver (python)的基本用法一

    阅在线 AIP 文档: http://selenium.googlecode.com/git/docs/api/py/index.html 目录 一.selenium+python 环境搭建..... ...

  3. python webdriver点击指令_测开系列Selenium Webdriver Python(20)--Webdriver运行原理

    Webdriver运行原理 转帖请注明出处!谢谢 在开发Webdriver的自动化脚本过程中,Webdriver后台在创建WebDriver实例的过程中,先确认浏览器的原生组件中是否存在可匹配的版本. ...

  4. 测开系列Selenium Webdriver Python(21)--元素定位2

    以上学习的是element的基本属性和方法,那么验证点添加的技巧和方式是什么呢?我们知道自动化的过程就是人的手工测试的过程,在手工测试中需要人来判断业务是否达到需求要求,那么在自动化脚本中就要加入程序 ...

  5. selenium webdriver (python) 第一版PDF

    前言 如果你是一位有python语言基础的同学,又想通过python+ selenium去实施自动化,那么你非常幸运的找到了这份文档,我也非常荣幸能为你的自动化学习之路带来一丝帮助. 其实,我在sel ...

  6. 50+道自动化/Selenium/性能/Python面试题

    写在前面 公司要求招一名自动化测试,能力要求不高,1年左右自动化经验+部分性能经验即可,让我出一份题,我就百度+公司项目遇到的问题,出了一份,出题整体思路是:接口自动化问题+性能问题+规划的ui.ap ...

  7. Linux运行webdriver,linux - 在chrome中运行Selenium WebDriver python绑定

    我在使用Selenium时遇到了问题. 对于我的项目,我必须使用Chrome. 但是,在使用Selenium启动它后,我无法连接到该浏览器. 出于某种原因,Selenium无法单独找到Chrome. ...

  8. selenium webdriver python 元素操作

    常用操作 click 点击某个元素 driver.find_element_by_id("su").click() clear driver.find_element_by_id( ...

  9. selenium webdriver python 环境搭建

    1. 安装python https://www.python.org/getit/ 选择2.7版本,下载安装即可. 验证是否安装成功:打开cmd,输入"python -V",显示p ...

  10. selenium webdriver(python)_selenium、webdriver及浏览器的关系及对应版本安装

    selenkium支持多种浏览器,包括Chrome,Safari,Firefox.Edge 等,我们以Chrome浏览器为例学习.先完成以下3步: 1 selenium安装 安装selenium和安装 ...

最新文章

  1. matlab怎么跑.cpp程序,MATLAB编译cpp文件
  2. matplotlb添加中文字体
  3. 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)...
  4. ***组网不用愁之1-中小企业***网络组建应用实录
  5. linux socket编程之TCP与UDP
  6. dockerfile拉取python3.7镜像
  7. python使用蓝牙功能_python bluetooth蓝牙信息获取蓝牙设备类型的方法
  8. android jar包下载地址
  9. 数据结构视频教程 -《数据结构C++ 复旦大学》
  10. UAV021(六):系统架构优化、SBUS协议、遥控器控制电机转动
  11. 格式化U盘的工具(USB无法识别 ,无法格式化 )
  12. 系统封装教程---之几种常用封装工具和驱动包的简单介绍
  13. 如何快速绘制一个等边三角形呢?
  14. ios 应用闪退原因
  15. 自定义provider
  16. BF算法及KMP算法的实现
  17. C# 请求外部服务的办法
  18. 产品研发细腰形架构1/2:产品技术体系的细腰形架构
  19. JAVA梅森旋转随机算法,你没听过的梅森旋转算法
  20. B1192 [HNOI2006]超级英雄Hero 二分图匹配

热门文章

  1. Java多线课程,java多线程课程.doc
  2. 超级黑科技代码!Python打造电脑人脸屏幕解锁神器附带接头暗号
  3. java内部类gc_Java内部类持有外部类的引用详细分析与解决方案
  4. 使用elementui实现表单上传功能_elementUI实现自定义上传文件并携带参数
  5. 百利而无一害的技术——Linux
  6. 小A与欧拉路(牛客-树的直径)
  7. 图论-有向图的连通性模板题(hdu1296)(hdu1827)
  8. matlab显示YCrCb的图像,【Matlab系列】读取并显示YUV视频文件
  9. retinanet50预训练权重_论文导读|基于注意力机制对齐增强预训练语言模型
  10. html判断对错,Html翻转校园试题