java+selenium自动化测试之8大常用定位方法

这篇具有很好参考价值的文章主要介绍了java+selenium自动化测试之8大常用定位方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

定位元素:Selenium能够模拟用户去浏览器页面上执行对应(输入,点击,清除,提交)等操作,它是凭什么方式去寻找到页面的元素?Selenium没有视觉、听觉等。Selenium通过在页面上寻找元素位置,找到元素后,然后对元素进行相应的操作,Selenium寻找元素位置的方法,称之为定位。

二、自动化测试步骤

简单的来说步骤为:定位元素→操作元素→验证操作结果→记录测试结果

三、常用八大定位元素

(1)id
(2)name
(3)class name
(4)tag name
(5)link text
(6)partial link text
(7)xpath
(8)css selector

 四、如何定位

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回元素句柄来定位元素

findElement() 方法返回一个元素, 如果没有找到,会抛出一个异 NoElementFindException()

findElements()方法返回多个元素, 如果没有找到,会返回空数组, 不会抛出异常

五、如何选择定位方法

选择简单,稳定的定位方法。当页面元素有 id属性的时候,尽量使用 id来定位。没有的话,再选择其他定位方法。cssSelector 执行速度快,推荐使用。
定位超链接的时候,可以考虑 linkText或 partialLinkText:但是要注意的是,文本经常发生改变,所以不推荐用。
xpath 功能最强悍。当时执行速度慢,因为需要查找整个DOM, 所以尽量少用。实在没有办法的时候,才使用 xpath。

六、定位方法的使用

1、通过id定位

例子:探测百度主页输入框

我们可以看到蓝色框里面的id="kw"。

java+selenium八大定位,selenium,测试工具

代码如下: 

driver.findElement(By.id( "kw" )).sendKeys("小马哥");

总结: 其实很简单,就是找元素的id,一般来说id都是唯一的,当然了特殊的另说,遇到特殊的就直接用Xpath定位。

2、通过name定位

代码如下:

driver.findElement(By.name( "wd" )).sendKeys("小马哥");

总结:其实很简单,就是找元素的name,一般来说name不都是唯一的,那就需要换其他的定位方法了,当然了特殊的另说。一般都是绝大多数,特殊是个例,也就是我们常说的另类,如果目标元素节点有这个name属性,我们就采用By name,如果没有,就换成其他方法,例如id,例如XPath,一般XPath是万能的 

3、通过class name定位
//By name 定位
 driver.findElement(By.className( "s_ipt" )).sendKeys("xiao");

 注意事项:当我们测试的过程中遇到了多类名的class时就需要谨慎了,因为多类名里面有空格,此外,我们需要在多类名里面找到正确的那一个。这样做很浪费时间,所以遇到多类名尽量用Xpath或者其他属性定位。就像下图这杨:

java+selenium八大定位,selenium,测试工具

4、 通过tag  name定位

通过tagname进行查找元素,findelement返回的数值没有重复的,那就是一个。

 WebElement ww = driver.findElement(By.tagName("title"));
 System.out.println(ww.getText());

如果当前标签存在重复则在运行的时候会找不到元素,此时需要使用find_elements***。通过tagName来搜索元素的时候,会返回多个元素. 因此需要使用findElements()。

List<WebElement> links= driver.findElements(By.tagName( "article" ));                 
        //storing the size of the links 
        int i= links.size();                 
        //Printing the size of the string 
        //System.out.println(i);                 
        for (int j=0; j<i; j++) 
        { 
            //Printing the links 
            System.out.println(links.get(j).getText()); 
        }

拓展:

1.tag name即标签名称,如:a、input、button、img等 

注意:  如果使用tagName,  要注意很多HTML元素的tagName是相同的,

比如单选框,复选框, 文本框,密码框.这些元素标签都是input.  此时单靠tagName无法精确获取我们想要的元素, 还需要结合type属性,才能过滤出我们要的元素

WebDriver driver  = new FirefoxDriver();
driver.get("http://www.cnblogs.com");
 List<WebElement> buttons = driver.findElements(By.tagName("input"));
 for (WebElement webElement : buttons) {
    if (webElement.getAttribute("type").equals("text")) {
        System.out.println("input text is :" + webElement.getText());
    }
}
5、通过link Text定位(精确定位)

注意:linkText也是遵循“匹配第一个”的原则,同一网页多次出现的话找第一个。

java+selenium八大定位,selenium,测试工具 代码如下:

driver.findElement(By.linkText("加入购物车")).click();
    	 Thread.sleep(1000);

Thread.sleep()的意思上面操作完成后让程序睡1秒。

 6、通过partial link text

java+selenium八大定位,selenium,测试工具

driver.findElement(By.partialLinkText("加入")).click();
    	 Thread.sleep(1000);

 注意:为了防止因为文字出现位置太多,定位失败,建议选择的字符要有唯一性,不然会定位到其他地方,或者无法定位。此外一定要连续的字才行,随便从中间挑几个字不连续那不行。英文也一样,得是连续字母才行。你要是不信偏要以身试法,那就会报错。

7、通过Xpath定位
(1)静态
  a、绝对路径定位
(1)WebElement searchBox = driver.findElement(By.xpath( "/html/body/div/div/div/div/div/form/span/input" ));

(2)WebElement SearchButton = driver.findElement(By.xpath("/html/body/div/div/div/div/div/form/span[2]/input[@value='百度一下']"));

 缺点:当页面元素位置发生改变时,都需要修改,因此,并不推荐使用绝对路径的写法。

  b、相对路径:
(1)WebElement searchBox = driver.findElement(By.xpath( "//*[@id='kw']" ));

(2)WebElement SearchButton = driver.findElement(By.xpath("//*[@id='su']"));

两者区别:

绝对路径  以 "/"  开头, 让xpath 从文档的根节点开始解析

相对路径  以"//" 开头, 让xpath 从文档的任何元素节点开始解析

一般我们在测试的时候直接选择需要测试的代码块然后 右击-复制-完整Xpath就OK了

(2)动态

有一种特殊的情况:页面元素的属性值会被动态地生成,即每次看到的页面元素属性值是不一样的,这种页面元素会加大定位的难度,使用模糊属性值定位方法可以部分解决问题。首先带大家了解一下xpath的元素

1)Starts-with()

格式:xxx.By.xpath("//标签[starts-with(@属性,'内容')]")

//input[starts-with(@name,'name1')]     
//查找name属性中开始位置包含'name1'关键字的页面元素
 2)Contains()

格式:xxx.By.xpath("//标签[contains(@属性,'内容')]")

 //查找name属性中包含wd关键字的页面元素
WebElement searchBox = driver.findElement(By.xpath( "//input[contains(@name,'wd')]" ));   

WebElement SearchButton = driver.findElement(By.xpath("//input[contains(@value,'百度一下')]")); 
 
3)text ()

格式:xxx.By.xpath("//标签[text()='文本']")  或者  xxx.By.xpath("//标签[text()='文本']")

//查找所有文本为"百度搜索" 的元素,精确匹配
driver.findElement(By.xpath("//*[text()='百度搜索']"));
//查找所有文本为“搜索” 的超链接 ,模糊匹配
driver.findElement(By.xpath("//a[contains(text(),'搜索')]"));

 总结:Xpath的功能非常强大,不仅能够完成界面定位的任务,而且能保证稳定性,实际自动化测试中,能够识别界面元素是重要的,更重要的是要保证版本间的稳定性,减少脚本的维护工作。
如下规则请参考:
(1)特征越少越好
(2)特征越是界面可见的越好
(3)不能使用绝对路径
(4)避免使用索引号
(5)相对路径,属性值,文本内容,Axis 可以任意组合,当然属性值和文本内容的模糊匹配也支持和上述方式任意组合,Axis 可以嵌套使用。
通过 Xpath 的各种方式组合,能够解决 selenium 自动化测试中界面定位的全部问题,可以说:有了 Xpath,响哥再也不用担心我不会元素定位了。

8、通过cssSelector()定位
1、绝对路径定位

格式:xxx.By.cssSelector("绝对路径")

CSS表达式:

①用大于号(>)

(1)html>body>div>div>div>div>div>form>span>input

(2)html>body>div>div>div>div>div>form>span>input[value='百度一下']

②用空格

(1)html body div div div div div form span input

(2)html body div div div div div form span input[value='百度一下']

实例代码

(1)WebElement searchBox = driver.findElement(By.cssSelector( "html>body>div>div>div>div>div>form>span>input" )); 

(2)WebElement SearchButton = driver.findElement(By.cssSelector("html>body>div>div>div>div>div>form>span>input[value='百度一下']"));

缺点:此方法缺点显而易见,当页面元素位置发生改变时,都需要修改,因此,并不推荐使用绝对路径的写法。

2、相对路径

        格式:xxx.By.cssSelector("标签[属性='']")

  CSS表达式 

(1)*[id="kw"]  

(2)*[id="su"]

实例代码

(1)WebElement SearchBox = driver.findElement(By.cssSelector( "*[id='kw']" )); 

(2)WebElement SearchButton = driver.findElement(By.cssSelector("*[id='su']"));
3、使用class名称定位

格式:xxx.By.cssSelector("标签.class名称")

CSS表达式:

(1)input.s_ipt

(2)input.btn 

实例代码

(1)WebElement SearchBox = driver.findElement(By.cssSelector( "input.s_ipt" )); 

(2)WebElement SearchButton = driver.findElement(By.cssSelector("input.btn"));

拓展

使用浏览器调试工具,可以直接获取CSS语句,如下图

java+selenium八大定位,selenium,测试工具  

七、总结
方法 语法 描述
id driver.findElement(By.id(String id)) 使用页面元素的id属性
name driver.findElement(By.name(String name)) 使用页面元素的name属性
className driver.findElement(By.className(String class)) 使用页面元素的类名属性
tagName driver.findElement(By.tagName(String tag)) 使用页面元素的HTML的标签名属性
linkText driver.findElement(By.linkText(String text)) 使用页面链接元素的文字属性(全部对应文字内容
partialLinkText driver.findElement(By.partialLinkText(String text)) 使用页面链接元素的文字属性(包含部分文字内容
xpath  driver.findElement(By.xpath(String xpath) 使用xpath定位
cssSelector driver.findElement(By.cssSelector(String css)) 使用CSS选择器定位

遵循原则:

1.若id和name在html中是唯一的,则优先使用这2种。

2.使用css或xpath,他们都很灵活,但语法复杂。Xpath性能应该是最慢的。

3.link text、partial link text缺点在于只对连接元素起作用。

4.class name不支持复合类名的元素。

5.tag name是危险的方法,因为一个页面上有很多相同标签的元素。

若某种方法定位到多个元素,则会返回第一个元素。

 文章来源地址https://www.toymoban.com/news/detail-859753.html

到了这里,关于java+selenium自动化测试之8大常用定位方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web自动化测试系列之selenium的运行原理和常用方法介绍(二)

    在上文中我们编写了一段简单的代码 ,可以驱动浏览器访问百度并搜索 。这里我们再把这段代码再拿来加以说明 。 如果你是初次接触它 ,你可能会想 ,这段代码是怎么驱动浏览器运行的了 ?要知道这个问题的答案 ,就必须搞清楚以下3个问题 。 它(selenium)的运行原

    2024年04月11日
    浏览(43)
  • 自动化测试——selenium之JS定位

    在自动化测试中,我们常用的元素定位方式有id,name,class_name,xpath,css_selector,link_text 还有不常用的tag_name,partial_link_text 其实还有js定位方法及jquery定位方法 一、js定位方法(注意书写格式及以分号结尾): 1.根据id定位 document.getElementById(\\\"id值\\\").操作方式; 2.根据ClassName定

    2023年04月27日
    浏览(48)
  • web自动化测试理论之selenium八大定位 -(2)

    概念:通过元素的id属性来定位元素。 前置:所要定位的元素必须有id属性 方法:driver.find_element_by_id(id属性值) 概念:通过元素的name属性来定位元素。 前置:所要定位的元素必须有name属性。 方法:driver.find_element_by_name(name属性值) 特点:当前页面可以重复 由于name属性值可以

    2024年02月09日
    浏览(82)
  • python自动化测试selenium定位frame及iframe示例

    这篇文章主要为大家介绍了python自动化测试selenium定位frame及iframe示例的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助 frame标签有frameset、frame、iframe三种,frameset和其它普通标签没有区别,不会影响正常定位,而frame与iframe对selenium定位而言是一样的。 Selenium有

    2024年01月20日
    浏览(44)
  • python ui自动化测试元素定位常用语法

    第一部分是css样式定位方法 选择器 示例 示例说明 CSS . class .intro 选择所有class=\\\"intro\\\"的元素 1 # id #firstname 选择所有id=\\\"firstname\\\"的元素 1 * * 选择所有元素 2 element p 选择所有p元素 1 element,element div,p 选择所有div元素和p元素 1 element   element div p 选择div元素内的所有p元素 1 element

    2024年02月13日
    浏览(51)
  • 自动化测试学习(六)-selenium定位元素之CSS选择器详细用法

    目录 1.通过class属性定位 2.通过id属性定位 3.通过标签名定位 4.其他方法定位    CSS是一种语言,它可以比较灵活的选择控件的任意属性,一般情况下比Xpath快,下面我们详细介绍CSS的用法。CSS常见语法如下表所示:  选择器 示例 描述 .class .s_ipt 选择class=\\\"s_ipt\\\"的所有元素 #i

    2024年01月17日
    浏览(52)
  • Selenium元素定位全攻略,让你轻松玩转自动化测试!

    一、什么是元素定位 元素定位就是查找HTML元素的过程,操作页面元素之前,首先要对元素进行定位,所以定位是自动化脚本编写的开始。 通常使用find_element或find_elements方法来定位元素(find_element 使用给定的方法定位和查找一个元素;find_elements 使用给定的方法定位和查找所

    2024年02月04日
    浏览(46)
  • 【selenium模块-WEB自动化】八大网页元素定位方法(三)

    一、id 定位 标签的 id 具有唯一性,就像人的身份证。 二、name 定位 name 指定标签的名称,在页面中可以不唯一。 三、class 定位 class 指定标签的类名,在页面中可以不唯一。 四、tag 定位 每个 tag 往往用来定义一类功能,所以通过 tag 来识别某个元素的成功率很低,每个页面

    2024年02月15日
    浏览(51)
  • python+selenium的web自动化测试之8种元素定位方式详解

    目录 前言 单一属性定位 通过元素的id 通过元素的name 通过元素的class 通过元素的标签名 通过元素的超链接文本 通过元素的部分超链接文本 XPTH定位 CSS定位 辅助定位工具 ​ 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确

    2023年04月16日
    浏览(59)
  • 自动化测试之八大元素定位方式(python3.10+selenium4)

    元素的定位是自动化测试核心。要操作一个对象,首先要识别定位或找到这个对象。为了实现网页整体布局,我们先要知道,一个元素,是如何定位到页面上的某个位置的,这就是元素定位。 系统环境 Windows 11 📌 python3.10.5 🔖 selenium 4.8.0 🚩 注意:以下每种定位方式均有一

    2024年02月03日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包