元素定位方式

本文介绍了功能测试的基本概念,详细讲解了Selenium自动化测试中常用的8种元素定位方法,包括id、name、className等,并对比了cssSelector与xpath的特点及应用场景。

1、为什么要查找元素

功能测试其实就是前端测试,测试的流程就是和浏览器进行交互,这种交互其实就是所说的手工操作,通过前端的手工操作完成功能的测试

例如注册功能的测试

我们首先要打开注册页面--》找到注册信息的输入框,输入内容,找到注册按钮--〉点击注册

其实这就是黑盒测试,不关注产品的内在具体实现逻辑,只关注表现出来的功能

2、web自动化测试

web自动化测试本质上就是功能测试--》其实就是用程序来模拟手工操作

通过程序找到相应的元素,完成对应的操作。

3、selenium定位方法:

selenium提供了8种定位方式

  • id
  • name
  • className
  • tagName
  • linkText
  • partialLinkText
  • cssSelector
  • xpath

这8种定位方式对应的API

  • By.id   

根据id来获取元素。返回单个元素,因为id一般是唯一的(但不规范的前端页面也可能出现id不唯一的情况)

  • By.name

根据元素的name属性来获取元素,所以可能会返回元素的集合

  • By.className

根据元素的样式class值来获取元素,可能会返回元素的集合

  • By.tagName

根据元素的标签名来获取元素,可能会返回元素的集合

  • By.linkText

根据超链接的文本值来获取元素

  • By.partialLinkText

根据超链接的部分文本值来获取元素

  • By.cssSelector

      cssSelector是selenium官网极力推荐使用的定位方式,而不是xpath,因为cssSelector比xpath的速度快,特别是在IE浏览器下(因为IE浏览器没有自己的xpath解析器)他比xpath更高效更准确更容易编写,美中不足是根据页面文字时略有缺陷,没有xpath直接

因为前端开发人员就是通过CSS Selector设置页面上每一个元素的样式,无论元素多么复杂,他们都能定位到,那我们使用cssSelector也能精准定位到页面的Elements

     CssSelector常用定位

1、通过标签

WebElement element = driver.findElement(By.cssSelector("input"));

2、通过id

#在css中代表id

//通过标签和id:也就是定位为:id为kw的input元素
WebElement element = driver.findElement(By.cssSelector("input#kw"));
//只有id,定位id为kw的元素
WebElement element = driver.findElement(By.cssSelector("#kw"));

3、通过元素的其他属性

//以百度首页为例:https://www.baidu.com/
/**
* 通过其他属性定位 
* 
*/
 driver.findElement(By.cssSelector("a[name='tj_briicon']")).click();//属性==值
driver.findElement(By.cssSelector("[autocomplete]")).sendKeys("hello");//有某个属性的元素
driver.findElement(By.cssSelector("input[type='submit'][value='百度一下']")).click();;

4、通过className

在cssSelector中用.代表className属性,后跟calssName属性值

//单一class:class中只有一种样式
driver.findElement(By.cssSelector(".username"))//.class
//复合class:class中有多个样式-->多个class样式要全写,并且用.连接
driver.findElement(By.cssSelector(".username.**.***"))//.classA.classB 

5、通过路径

1)子元素 A>B

WebElement input=  driver.findElement(By.cssSelector("form>span>input"));//搜索输入框

2)  后代元素 A空格B

WebElement input=  driver.findElement(By.cssSelector("form input"));//搜索输入框

3)第一个后代元素   :first-child

WebElement span= driver.findElemet(By.cssSelector("form :first-child"));//冒号前有空格,定位到form下所有级别的第一个子元素

4) 最后一个子元素    :last-child 

 WebElement userName = driver.findEleme(By.cssSelector("form :last-child"));//冒号前有空格,定位到form下所有级别的最后一个子元素
  • By.xpath

xpath:xpathExpression:xml的路径表达式

xpath其实就是一个path(路径),一个描述网页元素位置信息的路径,相当于元素的坐标

xpath基于xml文档的树状结构,是xml路径语言,用来查询xml文档中的节点

(1)绝对路径的方式,一级一级往下面找

driver.findElement(By.xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input")).sendKeys("lallal");

绝对路径的缺点:容易错、太长了、不好维护(前端人员经常调整页面)

一旦页面结构发生变化,比如页面重写设计,增加、减少了元素的话,xpath绝对路径可能会发生变化--》你需要重新写--〉可维护员性低

2)相对路径的方式

.//*[@id='kw']//相对路径表达式,.//和//都表示任意路径下,*表示任意元素,[]表示要加属性,属性要加@

注意在xpath中如果要用class属性(有多个样式叠加时)要写成@class='属性值1 属性值2 '(要写上所有的class属性值)

(3)常用的xpath方式

       <1>通过元素名定位://input 获取页面所有input元素

       <2>通过元素名+索引定位://form/div[1]/input   form元素下的第一个div元素下的第一个input元素

       <3>使用元素名+属性定位://*[@name='phone']  获取手机号输入框

       <4>使用元素名+包含部分属性值://*[contains(@name,'one')]   获取手机输入框

       <5>使用元素名+文本的内容://*[text()='免费注册']  

         要注意空格:比如前端代码如:<a href="/Index/reg.html">&nbsp;免费注册</a>

                     这个时候用//*[text()='免费注册']是定位不到的,要用contains的方法定位

       <6>使用元素名+部分文本的内容: //*[contains(text(),'免费')]

       <7>多条件表达式的选择: //*[text()='免费注册' and|or 条件2]  

               例如定位百度首页的输入框:

                   <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

                定位可以写成:

driver.findElement(By.xpath("//input[@maxlength='255' and @autocomplete='off']"));

4、FireBug与FirePath

  • 打开火狐浏览器
  • 打开菜单
  • 点击附加组件
  • 在扩展中搜索Firebug与Firepath
  • 安装后重新启动浏览器
### 回答1: Selenium是一个流行的自动化测试框架,它可以通过各种方式定位Web页面中的元素。以下是Selenium支持的常见元素定位方式: 1. ID:使用元素的唯一标识符进行定位。 2. Name:使用元素的名称进行定位。 3. Class Name:使用元素的类名进行定位。 4. Tag Name:使用元素的标签名称进行定位。 5. Link Text:使用链接文本进行定位。 6. Partial Link Text:使用部分链接文本进行定位。 7. CSS Selector:使用CSS选择器进行定位。 8. XPath:使用XPath表达式进行定位。 根据实际情况,选择适合自己的元素定位方式,可以方便地对Web页面进行测试和操作。 ### 回答2: Selenium是一套用于自动化浏览器操作的工具,可以模拟用户的操作,对页面元素进行定位和操作。 在Selenium中,元素定位是指通过不同的方式找到页面上的元素,以便后续对其进行操作。常用的元素定位方式有以下几种: 1. 通过ID定位:使用元素的唯一标识ID进行定位,可以通过driver.find_element_by_id方法进行定位。 2. 通过Name定位:使用元素的name属性进行定位,可以通过driver.find_element_by_name方法进行定位。 3. 通过Class Name定位:使用元素的class属性进行定位,可以通过driver.find_element_by_class_name方法进行定位。 4. 通过Tag Name定位:使用元素的标签名进行定位,可以通过driver.find_element_by_tag_name方法进行定位。 5. 通过Link Text定位:使用链接文本进行定位,可以通过driver.find_element_by_link_text方法进行定位。 6. 通过Partial Link Text定位:使用链接文本的一部分进行定位,可以通过driver.find_element_by_partial_link_text方法进行定位。 7. 通过XPath定位:使用XPath语法进行定位,可以通过driver.find_element_by_xpath方法进行定位。 8. 通过CSS Selector定位:使用CSS选择器进行定位,可以通过driver.find_element_by_css_selector方法进行定位。 以上是常见的Selenium元素定位方式,开发者可以根据具体的需求选择合适的定位方式来定位页面上的元素。同时,可以使用这些方法的复数形式(如find_elements_by_id)来定位多个符合条件的元素
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值