《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)

简介: 【5月更文挑战第11天】WebDriver 的 `isDisplayed()` 方法用于检查页面元素是否可见,如果元素存在于DOM中且可视,返回`true`,否则返回`false`。在自动化测试中,这个方法常用于验证元素是否真正显示在页面上。示例代码展示了如何使用 `isDisplayed()` 判断百度登录页面的特定错误提示文字是否出现。

1.简介

webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelected表示查看元素是否被选中,一般用在勾选框中(多选或者单选),isDisplayed表示查看什么呢?

2.isDisplayed()源码

/**

  * Is this element displayed or not? This method avoids the problem of having to parse an

  * element's "style" attribute.

  *

  * @return Whether or not the element is displayed

  */

 boolean isDisplayed();

从上边的源码中的注释可以看出isDisplay()方法是用来判断页面元素是否显示在页面。存在返回true,不存在返回false。

3.isDisplay()用法

List targetElement =  driver.findElements(By.xpath("xpath_your_expected_element"));


   try {


       if(targetElement>=1) {


           if(targetElement.isDisplayed()) {


               System.out.println("Element is present");


           }else {


               System.out.println("Element is found, but hidden on the page");

           

           }


       }else {


           System.out.println("Element not found on the page");


       }

   }catch (NoSuchElementException e) {


       System.out.println("Exception in finding the element:" + e.getMessage());


   }

4.项目实战

在webdriver自动化测试中,我们经常需要进行判断的一个场景。例如,有些操作,我们做了之后,会触发一些提醒,有些是正确的提醒,有些是红色字体显示的错误提示。我们自动化里面如何去捕获这些字段,如果进行测试自动化判断呢。这里就要用到isDisplay()方法了。宏哥这里用度娘的首页登录举例,判断“请填写验证码”这个字段是否出现。

4.1测试用例(思路)

1.访问度娘首页

2.定位首页的登录按钮,然后点击

3.弹出登录框定位短信登录按钮,然后点击

4.定位手机号输入框,然后输入手机号

5.定位登录框的登录按钮,然后点击

6.定位出现的“请填写验证码”,然后判断。

4.2代码设计

根据测试用例进行代码设计如下:

4.3参考代码

package lessons;


import java.util.concurrent.TimeUnit;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author: 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否存在(详解教程)

*

* 2021年11月19日

*/

public class testDisplay {

   

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

       

       System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  

         

       WebDriver driver = new ChromeDriver();  

   

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

     

       driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

       //访问度娘首页

       driver.get("https://www.baidu.com/");  

     

       Thread.sleep(1000);

       

       //定位首页的登录按钮,然后点击登录

       driver.findElement(By.xpath("//*[@id='u1']/a[1]")).click();

       //弹出登录框定位短信登录按钮,然后点击

       driver.findElement(By.id("TANGRAM__PSP_11__changeSmsCodeItem")).click();

       //定位手机号输入框,然后输入手机号

       driver.findElement(By.id("TANGRAM__PSP_11__smsPhone")).sendKeys("13734294156");

       //定位登录框的登录按钮,然后点击

       driver.findElement(By.id("TANGRAM__PSP_11__smsSubmit")).click();

       Thread.sleep(2000);

       // 方法一

       WebElement error_message = driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__smsError' and text()='请填写验证码']"));

       if(error_message.isDisplayed()){

           System.out.println("宏哥!元素存在");

       }else{

           System.out.println("宏哥!元素不存在");

       }

       driver.quit();

   }  

}

4.4运行代码

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

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

5.方法二

第二个方法,就是先得到这个字符串用String变量保存下来,然后对两个字符串进行比较。其实这种方法前边已经用过,只不过是宏哥没有指出,就像前边文章中的toast元素,直接定位存储在变量里,然后将其的文本打印出,是不是啊各位小伙伴们或者童鞋们。

5.1代码设计

5.2参考代码

package lessons;


import java.util.concurrent.TimeUnit;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author: 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否存在(详解教程)

*

* 2021年11月19日

*/

public class testDisplay {

   

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

       

       System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  

         

       WebDriver driver = new ChromeDriver();  

   

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

     

       driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

       //访问度娘首页

       driver.get("https://www.baidu.com/");  

     

       Thread.sleep(1000);

       

       //定位首页的登录按钮,然后点击登录

       driver.findElement(By.xpath("//*[@id='u1']/a[1]")).click();

       //弹出登录框定位短信登录按钮,然后点击

       driver.findElement(By.id("TANGRAM__PSP_11__changeSmsCodeItem")).click();

       //定位手机号输入框,然后输入手机号

       driver.findElement(By.id("TANGRAM__PSP_11__smsPhone")).sendKeys("13734294156");

       //定位登录框的登录按钮,然后点击

       driver.findElement(By.id("TANGRAM__PSP_11__smsSubmit")).click();

       Thread.sleep(2000);

       // 方法二

       String error_message = driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__smsError' and text()='请填写验证码']")).getText();

       if(error_message.equals("请填写验证码")){

           System.out.println("宏哥!元素存在");

       }else{

           System.out.println("宏哥!元素不存在");

       }

       driver.quit();

   }  

}

5.3运行代码

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

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

6.小结

1.isDisplayed()本身这个函数用于判断某个元素是否存在页面上(这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在HTML页面的一些元素)。

2.使用equals()和==,区别在于equals比较的是内容是否相等、==比较的是引用的变量地址是否相等。



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

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


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

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

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

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

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

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

Pycharm工具基础使用教程

相关文章
|
1天前
|
XML 测试技术 数据格式
《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)
【6月更文挑战第16天】本文介绍了TestNG中`@DataProvider`的两种使用方法。本文通过实例展示了TestNG如何利用`@DataProvider`结合方法名和`ITestContext`来灵活地为测试方法传递参数。
6 1
|
2天前
|
XML 存储 测试技术
《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 上篇(详解教程)
【6月更文挑战第15天】本文介绍了TestNG的数据驱动测试(Data Driven Testing, DDT)概念和好处,并提供了两个实战示例。数据驱动测试允许使用不同的测试数据执行相同的测试用例,这些数据可以从外部文件或数据库获取。这种方法提高了测试效率,减少了冗余代码,并便于应对应用程序变更。
10 0
|
3天前
|
Web App开发 XML 安全
《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)
【6月更文挑战第14天】本文介绍了如何使用TestNg进行自动化测试,特别是通过变量参数启动不同浏览器的步骤。
15 5
|
25天前
|
Python
办公自动化-Python如何提取Word标题并保存到Excel中?
办公自动化-Python如何提取Word标题并保存到Excel中?
40 2
|
1天前
|
运维 监控 API
自动化运维实践指南:Python脚本优化服务器管理任务
本文探讨了Python在自动化运维中的应用,介绍了使用Python脚本优化服务器管理的四个关键步骤:1) 安装必备库如paramiko、psutil和requests;2) 使用paramiko进行远程命令执行;3) 利用psutil监控系统资源;4) 结合requests自动化软件部署。这些示例展示了Python如何提升运维效率和系统稳定性。
22 8
|
3天前
|
数据采集 人工智能 数据挖掘
让工作自动化起来!无所不能的Python
让工作自动化起来!无所不能的Python
|
11天前
|
JSON 程序员 数据格式
豆瓣评分9.6!用81个项目带你从Python 3零基础到Python自动化
Python的名字来自超现实主义的英国喜剧团体,而不是来自蛇。Python程序员被亲切地称为Pythonistas。Monty Python和与蛇相关的引用常常出现在Python的指南和文档中。
|
13天前
|
数据采集 JSON API
自动化Reddit图片收集:Python爬虫技巧
自动化Reddit图片收集:Python爬虫技巧
|
16天前
|
JSON 程序员 数据格式
豆瓣评分9.6!用81个项目带你从Python 3零基础到Python自动化
Python的名字来自超现实主义的英国喜剧团体,而不是来自蛇。Python程序员被亲切地称为Pythonistas。Monty Python和与蛇相关的引用常常出现在Python的指南和文档中。
|
24天前
|
XML 数据格式 Python
Python自动化脚本编写技巧
本文介绍了Python自动化脚本的编写技巧:选择合适的库(如os, requests, BeautifulSoup)以简化编程,利用循环和条件语句实现流程控制,通过函数和模块提高代码的可读性和可维护性,使用异常处理保证脚本稳定性,以及借助日志记录进行问题追踪。通过这些方法,可以编写出高效、稳定的自动化脚本。

热门文章

最新文章