《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)

简介: 【4月更文挑战第10天】本文主要介绍了CSS定位元素的几种方法,包括ID属性值定位、其他属性值定位和使用属性值的一部分定位。作者提供了示例代码,展示了如何使用这些方法在Java+Selenium自动化测试中定位网页元素。通过CSS选择器,可以更精确地找到页面上的特定元素,如输入框、按钮等,并进行相应的操作,如输入文本、点击等。文章还提供了实际运行代码后的控制台输出和浏览器动作的示例。

1.简介

按计划今天宏哥继续讲解倚天剑-css的定位元素的方法:ID属性值定位、其他属性值定位和使用属性值的一部分定位(这个类似xpath的模糊定位)。

2.常用定位方法(8种)

(1)id

(2)name

(3)class name

(4)tag name

(5)link text

(6)partial link text

(7)xpath

(8)css selector(今天讲解)

3.自动测试实战

以百度首页为例,将CSS的各种定位方法一一讲解和分享一下。

3.1大致步骤

1.访问度娘首页。

2.通过CSS定位到元素,点击一下。

3.2使用ID属性值定位元素

使用ID属性值定位元素,以‘标签’开头,先指定一个 HTML 标签,然后加上一个“#”符号,跟上 id 的属性值。具体格式为:

xxx.By.cssSelector("标签#ID属性值")

具体例子:

xxx.By.cssSelector("input#btn")

具体步骤:

在被测试百度网页中,按照宏哥在5.2中的方法 (1)查找输入框并输入“北京宏哥”,(2)查找“百度一下”按钮,(3)点击“百度一下”按钮。

CSS表达式:

(1)input#kw


(2)input#su

java定位语句:

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


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

3.2.1代码设计

3.2.1参考代码

package lessons;


import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)

*

* 2021年8月12日

*/

public class ByCss {

   

   public  static  void  main(String [] args) throws InterruptedException {

       

       System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径

 

       WebDriver driver = new ChromeDriver ();

       //最大化窗口  

       driver.manage().window().maximize();  

       driver.get("http://wwww.baidu.com");

       

       //By css 定位

       WebElement SearchBox = driver.findElement(By.cssSelector( "input#kw" ));

       

       SearchBox.sendKeys("北京宏哥");

       

       WebElement HotButton  = driver.findElement(By.cssSelector("input#su"));

       

       HotButton.click();

       

       //定位到文本,将文本高亮显示

       //创建一个JavascriptExecutor对象

       JavascriptExecutor js =(JavascriptExecutor)driver;

 

       //新闻文本高亮显示颜色

       js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;");

 

       Thread.sleep (5000);

       

       //判断打开页面是不是北京宏哥,这里用url作为验证

         assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982";

             

         System.out.println("断言通过!");

 

       driver.quit();

   }


}

3.2.1运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

3.3使用页面其他属性值定位元素

使用页面其他属性值定位元素,以‘标签’开头,具体格式为:

xxx.By.cssSelector("标签[属性=属性值]")

具体例子:

xxx.By.cssSelector("input[password=password]")

除了 class 和 id 属性,CSS 选择器也可以使用其他的元素属性来定位。例如使用中的 Name 属性。

WebElement userName =driver.findElement(By.cssSelector("input[name=username]"));

alt 属性来定位元素。

WebElement previousButton =driver.findElement(By.cssSelector("img[alt='Previous']"));

你可能会遇到一个属性不足以来定位到一个元素的情况,你需要联合使用其他的属性来达到精确匹配。下面的例子中,使用多个属性来定位元素。

WebElement previousButton =driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));

具体步骤:

在被测试百度网页中,按照宏哥在5.2中的方法 (1)查找输入框并输入“北京宏哥”,(2)查找“百度一下”按钮,(3)点击“百度一下”按钮。

CSS表达式:

(1)input[name=wd]


(2)input[value=百度一下]

java定位语句:

(1)WebElement SearchBox = driver.findElement(By.cssSelector( "input[name=wd]" ));


(2)WebElement SearchButton = driver.findElement(By.cssSelector("input[value=百度一下]"));

3.3.1代码设计

3.3.1参考代码

package lessons;


import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)

*

* 2021年8月10日

*/

public class ByCss {

   

   public  static  void  main(String [] args) throws InterruptedException {

       

       System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径

 

       WebDriver driver = new ChromeDriver ();

       //最大化窗口  

       driver.manage().window().maximize();  

       driver.get("http://wwww.baidu.com");

       

       //By css 定位

       WebElement SearchBox = driver.findElement(By.cssSelector( "input[name=wd]" ));

       

       SearchBox.sendKeys("北京宏哥");

       

       WebElement HotButton  = driver.findElement(By.cssSelector("input[value=百度一下]"));

       

       HotButton.click();

       

       //定位到文本,将文本高亮显示

       //创建一个JavascriptExecutor对象

       JavascriptExecutor js =(JavascriptExecutor)driver;

 

       //新闻文本高亮显示颜色

       js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;");

 

       Thread.sleep (5000);

       

       //判断打开页面是不是北京宏哥,这里用url作为验证

         assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982";

             

         System.out.println("断言通过!");

 

       driver.quit();

   }


}

3.3.1运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

3.4使用属性值的一部分内容定位元素

  此方法宏哥感觉和前边介绍的模糊定位差不多,具体语法和例子以及描述,如下表所示:

语法

     例子      

描述

^=

input[id^= ' ctrl']     

以 XXX 开始,例如,如果一个元素的ID是ctrl_12,就可以定位到此元素,匹配到 id 的头部 ctrl

$=

input[id$='_username']

以 XXX 结尾,例如,如果一个元素的 ID 是a_1_userName,返将会匹配到 id 的尾部_userName。

*=

input[id*='username']

包含。例如,如果一个元素的 ID 是 panel_login_userName_textfield,返将会匹配到此 id 值的_userName,从而定位到元素

具体步骤:

在被测试百度网页中,按照宏哥在5.2中的方法 (1)查找输入框并输入“北京宏哥”,(2)查找“百度一下”按钮,(3)点击“百度一下”按钮。

CSS表达式:

(1)input[id ^= 'k']


(2)input[id *='su']

java定位语句:

(1)WebElement SearchBox = driver.findElement(By.cssSelector( "input[id ^= 'k'] " ));


(2)WebElement SearchButton = driver.findElement(By.cssSelector("input[id *='su']"));

3.3.1代码设计

3.3.1参考代码

package lessons;


import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)

*

* 2021年8月10日

*/

public class ByCss {

   

   public  static  void  main(String [] args) throws InterruptedException {

       

       System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径

 

       WebDriver driver = new ChromeDriver ();

       //最大化窗口  

       driver.manage().window().maximize();  

       driver.get("http://wwww.baidu.com");

       

       //By css 定位

       WebElement SearchBox = driver.findElement(By.cssSelector( "input[id^='k']" ));

       

       SearchBox.sendKeys("北京宏哥");

       

       WebElement HotButton  = driver.findElement(By.cssSelector("input[id*='su']"));

       

       HotButton.click();

       

       //定位到文本,将文本高亮显示

       //创建一个JavascriptExecutor对象

       JavascriptExecutor js =(JavascriptExecutor)driver;

 

       //新闻文本高亮显示颜色

       js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;");

 

       Thread.sleep (5000);

       

       //判断打开页面是不是北京宏哥,这里用url作为验证

         assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982";

             

         System.out.println("断言通过!");

 

       driver.quit();

   }


}

3.3.1运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

4.小结

这篇文章中的第一和第二种方法其实就是用:标签和属性组合进行定位的,那么单单用属性可以定位吗?宏哥试一下。

4.1属性定位

可以通过元素的id,class,tag标签这三个属性直接定位

(1)# 表示id属性,如:#kw

(2). 表示class属性,如:.s_ipt

(3)直接用标签名称,如:input

4.1.1参考代码

package lessons;


import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)

*

* 2021年8月12日

*/

public class ByCss {

   

   public  static  void  main(String [] args) throws InterruptedException {

       

       System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径

 

       WebDriver driver = new ChromeDriver ();

       //最大化窗口  

       driver.manage().window().maximize();  

       driver.get("http://wwww.baidu.com");

       

       //By css class定位

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

       

       SearchBox.sendKeys("北京宏哥");

       

       //By css id定位

       WebElement HotButton  = driver.findElement(By.cssSelector("#su"));

       

       HotButton.click();

       

       //定位到文本,将文本高亮显示

       //创建一个JavascriptExecutor对象

       JavascriptExecutor js =(JavascriptExecutor)driver;

 

       //新闻文本高亮显示颜色

       js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;");

 

       Thread.sleep (5000);

       

       //判断打开页面是不是北京宏哥,这里用url作为验证

         assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982";

             

         System.out.println("断言通过!");

 

       driver.quit();

   }


}

4.2其它属性定位

通过其它属性定位时,直接写属性名和属性值

4.2.1参考代码

package lessons;


import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)

*

* 2021年8月12日

*/

public class ByCss {

   

   public  static  void  main(String [] args) throws InterruptedException {

       

       System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径

 

       WebDriver driver = new ChromeDriver ();

       //最大化窗口  

       driver.manage().window().maximize();  

       driver.get("http://wwww.baidu.com");

       

       //By css class定位

       WebElement SearchBox = driver.findElement(By.cssSelector( "[name='wd']" ));

       

       SearchBox.sendKeys("北京宏哥");

       

       //By css id定位

       WebElement HotButton  = driver.findElement(By.cssSelector("[value='百度一下']"));

       

       HotButton.click();

       

       //定位到文本,将文本高亮显示

       //创建一个JavascriptExecutor对象

       JavascriptExecutor js =(JavascriptExecutor)driver;

 

       //新闻文本高亮显示颜色

       js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;");

 

       Thread.sleep (5000);

       

       //判断打开页面是不是北京宏哥,这里用url作为验证

         assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982";

             

         System.out.println("断言通过!");

 

       driver.quit();

   }


}

以上代码宏哥都运行了,可以正常运行和定位。好了今天时间也不早了就分享到这里吧!




每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

相关文章
|
6天前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
27 6
|
21天前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
35 2
|
29天前
|
设计模式 Java 测试技术
【Selenium使用误区】Iframe元素定位失败:避免误提GitHub Issue的技巧
本文分享了作者在使用Selenium进行UI自动化测试时遇到的一个常见问题:在模拟登录163邮箱的过程中,元素定位失败,原因是没有正确地定位到iframe内的元素。文章通过分析问题原因、提供解决方案和附录代码,指导读者如何避免类似的错误,并强调了在UI自动化测试中准确定位页面元素的重要性。
22 1
|
29天前
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
19 1
|
1月前
|
Java 测试技术 API
Java 新手入门:Java单元测试利器,Mock详解
Java 新手入门:Java单元测试利器,Mock详解
84 1
|
1月前
|
XML 前端开发 JavaScript
[selenium]元素定位
[selenium]元素定位
|
1月前
|
Java 测试技术
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
23 0
|
1月前
|
Java 测试技术 API
深入理解单元测试:JUnit框架在Java中的应用
【8月更文挑战第3天】本文将引导读者通过JUnit框架的镜头,探索单元测试的奥秘。我们将一起揭开单元测试的神秘面纱,了解其在软件开发中的关键作用,并具体学习如何在Java项目中应用JUnit进行有效的单元测试。文章不仅会涉及理论概念,还将通过具体的代码示例,展示如何编写和运行单元测试,以确保软件质量。让我们开始吧,一起踏上这段提升代码质量和开发效率的旅程。
26 0
|
Java 数据库 容器
|
6天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)