轻松自动化---selenium-webdriver(python) (四)
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) (四)相关推荐
- Selenium WebDriver + python 自动化测试框架
目标 组内任何人都可以进行自动化测试用例的编写 完全分离测试用例和自动化测试代码,就像写手工测试用例一下,编写excel格式的测试用例,包括步骤.检查点,然后执行自动化工程,即可执行功能自动化测试用例 ...
- selenium webdriver (python)的基本用法一
阅在线 AIP 文档: http://selenium.googlecode.com/git/docs/api/py/index.html 目录 一.selenium+python 环境搭建..... ...
- python webdriver点击指令_测开系列Selenium Webdriver Python(20)--Webdriver运行原理
Webdriver运行原理 转帖请注明出处!谢谢 在开发Webdriver的自动化脚本过程中,Webdriver后台在创建WebDriver实例的过程中,先确认浏览器的原生组件中是否存在可匹配的版本. ...
- 测开系列Selenium Webdriver Python(21)--元素定位2
以上学习的是element的基本属性和方法,那么验证点添加的技巧和方式是什么呢?我们知道自动化的过程就是人的手工测试的过程,在手工测试中需要人来判断业务是否达到需求要求,那么在自动化脚本中就要加入程序 ...
- selenium webdriver (python) 第一版PDF
前言 如果你是一位有python语言基础的同学,又想通过python+ selenium去实施自动化,那么你非常幸运的找到了这份文档,我也非常荣幸能为你的自动化学习之路带来一丝帮助. 其实,我在sel ...
- 50+道自动化/Selenium/性能/Python面试题
写在前面 公司要求招一名自动化测试,能力要求不高,1年左右自动化经验+部分性能经验即可,让我出一份题,我就百度+公司项目遇到的问题,出了一份,出题整体思路是:接口自动化问题+性能问题+规划的ui.ap ...
- Linux运行webdriver,linux - 在chrome中运行Selenium WebDriver python绑定
我在使用Selenium时遇到了问题. 对于我的项目,我必须使用Chrome. 但是,在使用Selenium启动它后,我无法连接到该浏览器. 出于某种原因,Selenium无法单独找到Chrome. ...
- selenium webdriver python 元素操作
常用操作 click 点击某个元素 driver.find_element_by_id("su").click() clear driver.find_element_by_id( ...
- selenium webdriver python 环境搭建
1. 安装python https://www.python.org/getit/ 选择2.7版本,下载安装即可. 验证是否安装成功:打开cmd,输入"python -V",显示p ...
- selenium webdriver(python)_selenium、webdriver及浏览器的关系及对应版本安装
selenkium支持多种浏览器,包括Chrome,Safari,Firefox.Edge 等,我们以Chrome浏览器为例学习.先完成以下3步: 1 selenium安装 安装selenium和安装 ...
最新文章
- matlab怎么跑.cpp程序,MATLAB编译cpp文件
- matplotlb添加中文字体
- 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)...
- ***组网不用愁之1-中小企业***网络组建应用实录
- linux socket编程之TCP与UDP
- dockerfile拉取python3.7镜像
- python使用蓝牙功能_python bluetooth蓝牙信息获取蓝牙设备类型的方法
- android jar包下载地址
- 数据结构视频教程 -《数据结构C++ 复旦大学》
- UAV021(六):系统架构优化、SBUS协议、遥控器控制电机转动
- 格式化U盘的工具(USB无法识别 ,无法格式化 )
- 系统封装教程---之几种常用封装工具和驱动包的简单介绍
- 如何快速绘制一个等边三角形呢?
- ios 应用闪退原因
- 自定义provider
- BF算法及KMP算法的实现
- C# 请求外部服务的办法
- 产品研发细腰形架构1/2:产品技术体系的细腰形架构
- JAVA梅森旋转随机算法,你没听过的梅森旋转算法
- B1192 [HNOI2006]超级英雄Hero 二分图匹配
热门文章
- Java多线课程,java多线程课程.doc
- 超级黑科技代码!Python打造电脑人脸屏幕解锁神器附带接头暗号
- java内部类gc_Java内部类持有外部类的引用详细分析与解决方案
- 使用elementui实现表单上传功能_elementUI实现自定义上传文件并携带参数
- 百利而无一害的技术——Linux
- 小A与欧拉路(牛客-树的直径)
- 图论-有向图的连通性模板题(hdu1296)(hdu1827)
- matlab显示YCrCb的图像,【Matlab系列】读取并显示YUV视频文件
- retinanet50预训练权重_论文导读|基于注意力机制对齐增强预训练语言模型
- html判断对错,Html翻转校园试题