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元素定位篇的更多相关文章

  1. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  2. selenium元素定位之css选择器

    在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...

  3. Selenium3 + Python3自动化测试系列二——selenium元素定位

    一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...

  4. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  5. python学习之——selenium元素定位

    web自动化测试按步骤拆分,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 其中定位元素尤为关键,此篇是使用webdriver通过页面各个 ...

  6. python selenium 元素定位(三)

    上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...

  7. 我是这么学习Selenium元素定位操作的

    写在前面 做web自动化测试都有体会,本质也就是通过操作页面元素对象来模拟用户操作行为,那么首先我们先找到这些元素对象,然后才能进行一系列操作. 我们得先告诉自动化工具或者说代码要操作那个元素,毕竟代 ...

  8. Selenium+Java(三)Selenium元素定位

    前言 使用Selenium做元素定位的时候,需要用到HTML的知识,所以最好是能懂得HTML的基本知识. 一.页面元素的查看(以百度为例) 打开IE浏览器,点击F12进入开发者模式,点击图中红圈圈中的 ...

  9. Java + selenium 元素定位(5)之By Xpath

    这篇关于Xpath方法的文章和之前那篇CSS的方法一样,使用前,需要先掌握一些Xpath的相关知识.当然,网上也有各种工具可以帮助我们获取到元素的Xpath,但是这并不代表着我们就可以不用了解Xpat ...

随机推荐

  1. 数学思想:为何我们把 x²读作x平方

    要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...

  2. C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)

    本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...

  3. Python应用03 使用PyQT制作视频播放器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 最近研究了Python的两个GUI包,Tkinter和PyQT.这两个GUI包的底层分别是Tcl/ ...

  4. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

  5. JavaWeb——Servlet

    一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...

  6. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  7. 关于DDD的学习资料汇总

    DDD(Domain-Driven Design)领域驱动设计,第一次看到DDD是在学习ABP时,在其中的介绍中看到的.what,DDD是个什么鬼,我不是小白,是大白,没听过.于是乎,度娘查查查,找到 ...

  8. MyBatis源码分析(一)开篇

    源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...

  9. css3更改input单选和多选的样式

    在项目开发中我们经常会遇到需要更改input单选和多选样式的情况,今天就给大家介绍一种简单改变input单选和多选样式的办法. 在这之前先简单介绍一下:before伪类 :before 选择器向选定的 ...

  10. jquery-treegrid树状表格的使用(.Net平台)

    上一篇介绍了DataTable,这一篇在DT的基础之上再使用jquery的一款插件:treegrid,官网地址:http://maxazan.github.io/jquery-treegrid/ 一. ...