web自动化:selenium原理和元素定位(一)
一. Selenium2 WebDriver
- 当Selenium2.x提出了WebDriver的概念后,它提供了完全另外的一种方式与浏览器交互
那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏、窗口大小、启动、关闭、安装插件、配置证书之类的)
由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学
然而带来的一些副作用就是,不同的浏览器厂商,对web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现
例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等(甚至包括了AndroidDriver和IOS WebDriver)
二. Selenium环境搭建以及原理解释
简而言之,就是selenium里面的webdriver会直接控制浏览器(通过不同浏览器的驱动),然后对目标进行测试—>UI层面的


三. 常用方法
1. 创建对象driver
driver = webdriver.Chrome()
2. 浏览器中加载url
driver.get(url)
3. 浏览器窗口最大化
driver.maximize_window()
4. 浏览器窗口固定大小
driver.set_window_size(x, y)
5. 向前
driver.forward()
6. 后退
driver.back()
7. 刷新
driver.refresh()
8. 截屏
driver.get_screenshot_as_file(filename)
9. 设置等待时间:时间单位为s,有时候页面元素加载不全的时候,我们需要去用等待时间,等待页面加载完全
import time time.sleep(n)
10. 获得当前页面的url
driver.current_url
11. 获得当前页面的标题
driver.title
12. 退出
driver.quit() 用于结束进程,关闭所有的窗口,最后测试结束的时候,建议大家用quit close() 用于关闭当前窗口,当打开的窗口较多时,就可以用close关闭部分窗口
四. 常用定位
find_element_by_XXX 只返回符合定位表达式的html页面中的第一个元素
find_elements_by_XXX 返回的是一个列表
以百度首页为例
1. id定位(优先使用id,但如果id是动态生成的,就不能使用了)
id中带数字的就要注意一下,看是不是动态的
driver.find_element_by_id("kw)
2. class定位
driver.find_element_by_class_name("s_ipt)
driver.find_elements_by_class_name("s_ipt)
3. name定位
driver.find_element_by_name("wd)
driver.find_elements_by_name("wd)
4. tag name定位
driver.find_element_by_tag_name("input)
driver.find_elements_by_tag_name("input)
5. link text定位
driver.find_element_by_link_text("贴吧") #利用全部link文本定位
6. partial link text定位
driver.find_element_by_partial_link_text("贴") #利用部分link文本定位
7. xpath定位
driver.find_element_by_xpath() driver.find_elements_by_xpath()
8. CSS定位
CSS中, #id值 .class值 写法是标签名[属性名=值]
CSS中用空格表示层级关系, 如 span input中sapn是input的父级
实例1:通过id来定位输入框,前面的*表示标签名

实例2:通过属性name来定位输入框,前面的*表示标签名

实例3:通过class定位输入框

实例4:层级定位,用空格分割

五. xpath定位
1. 绝对路径定位:以 "/" 开头,从文档的根节点开始解析。可使用浏览器调试工具,来直接获得xpath语句

2. 绝对路径的缺点
当页面结构有调整的时候,路径也随之失效,必须重写,不方便后期维护
3. 相对路径定位:以"//"开头,从文档的任何元素节点开始解析
其他语法:
| 表达式 | 描述 |
| nodename | 选取此节点的所有子节点 |
| . | 选取当前节点 |
| .. | 选取当前节点的父节点 |
| @ | 选取属性, 举例://div[@属性名称="属性值"] |
| * | 通配符,匹配所有 |
实例1:定位百度输入框,根据属性name="wd" (可在谷歌浏览器调试工具中按Ctrl + F打开定位输入框)

实例2:如果//标签[@属性]仍然有多个元素,可考虑层级定位,举个例子,如果input有多个时,可考虑层级定位(找父级或父级以上)

4. xpath定位和函数和逻辑
| 函数和逻辑 | 描述 | 举例 |
| text() | 元素的text内容 | //*[@id="xxx"]//p[text()="xxxx"] |
| contains(@属性/text(), value) | 包含函数 | contains(@class, "xxx"), contains(text(), "xxxx") |
|
and or |
表示条件与 表示条件或 |
//div[@class="xxx" and contains(@style, "display:visibility")] |
实例1:利用xpath text()函数定位

实例2:利用xpath contains()函数定位

实例3:利用xpath 逻辑与定位

5. 弹出框问题
一个页面的几个操作,都会有弹出框出现,定位到弹出框会有几个,但通过display的值来定位到当前显示的那一个
"display=none"表示无弹出框
"display=block/visibility"表示有弹出框
实例1:百度有弹出框的页面

实例2:百度无弹出框的页面

web自动化:selenium原理和元素定位(一)的更多相关文章
- 【python+selenium的web自动化】- 8种元素定位方式详解
我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. 说明:以下操作统 ...
- UI自动化(selenium+python)之元素定位的三种等待方式
前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况.这种情况下,需要用等待wait. 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverW ...
- selenium+java二元素定位
页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法. 测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 自动化测试步骤 定位元素 ...
- Selenium Web 自动化 - Selenium常用API
Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作 1.1 用webdriver打开一个浏览器 1.2 最大化浏览器&关闭浏览器 ...
- Selenium Web 自动化 - Selenium(Java)环境搭建
Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...
- Python3-Selenium自动化测试框架(二)之selenium使用和元素定位
Selenium自动化测试框架(二)之selenium使用和元素定位 (一)selenium的简单使用 1.导包 from selenium import webdriver 2.初始化浏览器 # 驱 ...
- Web自动化selenium技术快速实现爬虫
selenium是大家众所周知的web自动化测试框架,主要用来完成web网站项目的自动化测试,但其实如果要实现一个web爬虫,去某些网站爬取数据,其实用selenium来实现也很方便. 比如,我们现在 ...
- Selenium 八种元素定位方法
前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...
- 软件WEB自动化测试工具之智能元素定位
江湖一直有着这么一句名言“天下武功,唯快不破".那么在软件测试领域,自然而然我们会想到软件自动化测试.软件自动化测试的实现自然离不开软件自动化测试工具.软件自动化测试工具是软件自动化的载体, ...
随机推荐
- Service 事务(JdbcUtils 升级)
1. DAO 事务 // 在 DAO 中处理事务真是"小菜一碟" public void xxx(){ Connection con = null; try{ con = Jdbc ...
- 1.Configure the mongo Shell-官方文档摘录
Customize the Prompt 自定义提示 You may modify the content of the prompt by setting the variable prompt i ...
- python并发编程&多进程(一)
本篇理论居多,实际操作见: python并发编程&多进程(二) 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行) ...
- 我的Android进阶之旅------>Android百度地图定位SDK功能学习
因为项目需求,需要使用百度地图的定位功能,因此去百度地图开发平台下载了百度地图的Android定位SDK最新版本的开发包和示例代码学习. Android 定位SDK地址:http://develope ...
- springboot springmvc 支持 https
Spring Mvc和Spring Boot配置Tomcat支持Https 背景 最近在项目开发中需要让自己的后端Restful接口支持https,在参考了很多前辈们的博客后总结了一些. Spring ...
- npm-folders
npm-folders Executable(可执行程序) 在全局模式下,可执行程序被链接到Unix的{prefix}/bin目录下,或者是Windows的{prefix}目录下. 在本地模式下,可执 ...
- MySQL数据库(5)_MySQL数据库视图、触发器
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...
- linux 定时任务未执行php脚本
1,对于无法执行php文件,首先你应该考虑的问题是是否php代码有错误,你可以先检查一下你的php代码,或者可以在linux上面执行一下这个文件,看是否能够执行成功:如果成功了,就说明是crontab ...
- 解决:Requested 'libdrm_radeon >= 2.4.56' but version of libdrm_radeon is 2.4.52
checking for NOUVEAU... yes checking for RADEON... no configure: error: Package requirements (libdrm ...
- Delphi中ComPort通信中的数据处理
源: Delphi中ComPort通信中的数据处理