selenium元素定位篇
Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击、双击、输入、滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单击、双击、输入等操作,所以元素定位是UI自动化测试的前提条件。可以联想到之前说的页面经常变动的项目为什么不适合进行UI自动化测试,如果元素一直在变动,你就要不停的修改代码,维护工作量太大,投入产出比就太低了。
Selenium提供了8种定位方式:
l Id
l Name
l Tag name
l Xpath
l Css
l Link text
l Partial Link text
l Class name
定位的基本语法为:
WebDriver driver =new FirefoxDriver();
driver.findElement(By.id("id"));
driver.findElement(By.name("name"));
driver.findElement(By.className("className"));
driver.findElement(By.linkText("链接全部文字"));
driver.findElement(By.partialLinkText("链接的部分文字"));
driver.findElement(By.xpath("xpath定位表达式"));
driver.findElement(By.cssSelector("CSS表达式"));
driver.findElement(By.tagName("标签名"));
Id定位相对准确些,因为在页面id一般是唯一的标识符,name可能定位到的元素不只有单个元素,可能不唯一,导致不能准确的定位元素,脚本出现报错。
举例说明(以百度首页为例):
WebDriver driver =new FirefoxDriver();
driver.navigate().to("https://www.baidu.com/"); //输入URL,进入百度主页
driver.manage().window().maximize(); //窗口最大化
driver.findElement(By.id("kw")).sendKeys("selenium"); //使用id定位,在百度输入框中输入selenium关键词
driver.findElement(By.xpath("//input[@id='su']")).click(); //使用xpath定位,单击提交按钮
主要说下xpath定位:
1.使用绝对路径定位:
例如:html/body/div/div/div/div/div/form/input[@id=’kw’];
2.使用相对路径定位:
例如://input[@id=’kw’];
其中”//“表示在所有层级中进行查找,建议使用相对路径进行定位,因为相对路径相对的简洁些,不管页面发生一下什么变化,只要id值为kw的input元素还在就可以定位到,这样可以降低代码维护成本。
3.使用索引号进行定位:
//input[2] 表示xpath在定位查找元素时,选择第二个tagname为input的元素即为所需元素,遇到页面HTML层级比较复杂的页面不建议使用索引号定位。
4.使用页面元素的属性值来定位:
//img[@alt=’div1-img1’]; 此xpath定位的是alt属性值为div1-img1的图片元素,北侧网页的元素通常会包含各种各样的属性值,并且很多的属性值是唯一的,强烈建议使用相对路径结合属性值的定方式来定位,这种准确率相对较高。
|
预期定位的页面元素 |
定位表达式 |
使用的属性值 |
|
定位页面的一张图片 |
//img[@href=’http://www.sogou.com’] |
使用img的href属性 |
|
定位第2个div中的第一个输入框 |
//div[2]/input[@name=’kw’] |
使用input的name属性 |
|
定位第1个div中的第一个链接 |
//div[@name=’div2’]/a[@href=’http://www.sogou.com’] |
使用a的href属性 |
|
定位页面的查询按钮 |
//input[@type=’button’] |
使用input的type属性 |
5.使用页面元素的文本定位:
//a[text()=’百度搜索’] 定位文本为”百度搜索“的链接
//a[contains(text(),’百度’)] 定位文本包含”百度“字样的链接
6.CSS定位
7.JQuery定位
页面元素的定位是在整个自动化测试中都需要用到的技能,也是最繁琐的,因为你要去不断的试错,不断的运行脚本去检查自己的元素定位是否有效,这个占了整个测试很大一部分时间。
selenium元素定位篇的更多相关文章
- 自动化测试基础篇--Selenium元素定位
摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...
- selenium元素定位之css选择器
在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...
- Selenium3 + Python3自动化测试系列二——selenium元素定位
一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...
- selenium元素定位陷阱规避
为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...
- python学习之——selenium元素定位
web自动化测试按步骤拆分,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 其中定位元素尤为关键,此篇是使用webdriver通过页面各个 ...
- python selenium 元素定位(三)
上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...
- 我是这么学习Selenium元素定位操作的
写在前面 做web自动化测试都有体会,本质也就是通过操作页面元素对象来模拟用户操作行为,那么首先我们先找到这些元素对象,然后才能进行一系列操作. 我们得先告诉自动化工具或者说代码要操作那个元素,毕竟代 ...
- Selenium+Java(三)Selenium元素定位
前言 使用Selenium做元素定位的时候,需要用到HTML的知识,所以最好是能懂得HTML的基本知识. 一.页面元素的查看(以百度为例) 打开IE浏览器,点击F12进入开发者模式,点击图中红圈圈中的 ...
- Java + selenium 元素定位(5)之By Xpath
这篇关于Xpath方法的文章和之前那篇CSS的方法一样,使用前,需要先掌握一些Xpath的相关知识.当然,网上也有各种工具可以帮助我们获取到元素的Xpath,但是这并不代表着我们就可以不用了解Xpat ...
随机推荐
- 关于CryptoJS中md5加密以及aes加密的随笔
最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...
- 【AR实验室】ARToolKit之制作自己的Marker/NFT
0x00 - 前言 看过example后,就会想自己动动手,这里改改那里修修.我们先试着添加自己喜欢的marker/nft进行识别. 比如我做了一个法拉利的marker: 还有网上找了一个法拉利log ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- SQL Server常见数据类型介绍
数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...
- Javascript 代理模式模拟一个文件同步功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于.NET参数传递方式的思考
年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想法,但就是叫不动我的手脚,所以我只能看着别人在做我想做 ...
- 利用apply()或者rest参数来实现用数组传递函数参数
关于call()和apply()的用法,MDN文档里写的非常清晰明白,在这里就不多做记录了. https://developer.mozilla.org/zh-CN/docs/Web/JavaScri ...
- nodejs利用ajax实现网页无刷新上传图片
nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...
- JavaScript基础知识总结(四)
JavaScript语法 八.函数 函数就是完成某个功能的一组语句,函数由关键字function + 函数名 + 加一组参数定义: 函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可 ...
- 使用python自动生成docker nginx反向代理配置
由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...