《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
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<WebElement> 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比较的是内容是否相等、==比较的是引用的变量地址是否相等。
《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)的更多相关文章
- 《手把手教你》系列技巧篇(五十一)-java+ selenium自动化测试-字符串操作-下篇(详解教程)
1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
- 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)
1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
- 《手把手教你》系列技巧篇(四十一)-java+ selenium自动化测试 - 处理iframe -上篇(详解教程)
1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了.但是还是有小伙伴或者童 ...
- 《手把手教你》系列技巧篇(四十二)-java+ selenium自动化测试 - 处理iframe -下篇(详解教程)
1.简介 经过宏哥长时间的查找,终于找到了一个含有iframe的网页.所以今天这一篇的主要内容就是用这个网页的iframe,宏哥给小伙伴或者童鞋们演示一下,在处理过程中遇到的问题以及宏哥是如何解决的. ...
- 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...
- 《手把手教你》系列技巧篇(三十四)-java+ selenium自动化测试-单选和多选按钮操作-中篇(详解教程)
1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历单选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的单选按钮进行实战. 2.d ...
随机推荐
- 攻防世界 杂项13.can_has_stdio?
打开发现是由trainfuck编码组成的小星星阵容,果断交给解密网站进行解密, 解密网站:http://ctf.ssleye.com/brain.html flag:flag{esolangs_for ...
- 洛谷 P5658 [CSP-S2019] 括号树
链接: P5658 分析: 显然我们应该在dfs树的同时维护每个点的答案. 注意到第 \(u\) 个点的答案可以分成两部分,不包含 \(u\) 点时的答案,和加入 \(u\) 点后新增的答案,前者可以 ...
- IDEA插件开发,我是如何把公司的发布系统搬到IDEA里的
不得不说JetBrains公司直的非常的牛B,每一个程序员都能在JetBrains的官方网站找到一款属于自己的开发工具.这些开发工具在工作中给我们带来了巨大的便利.各种各样的基础插件,第三方插件,真是 ...
- 基于屏幕空间的实时全局光照(Real-time Global Illumination Based On Screen Space)
目录 Reflective Shadow Maps(RSM) RSM 的重要性采样 RSM 的应用与缺陷 Screen Space Ambient Occulsion(SSAO) SSAO Blur ...
- vim 删除 替换
1,删除包含pattern的某一行 :g/pattern/d 或 :%g/pattern/d 2,删除不包含pattern的某一行 :v/pattern/d 或 :g!/pattern/d 3,替换 ...
- 第05课 OpenGL 3D空间
3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D ...
- Centos7 误删除bin/sbin之类的恢复
参考连接:https://blog.csdn.net/weixin_41843733/article/details/107468767 挂载对应版本的光盘进入急救模式,复制已经丢失的命令到/mnt/ ...
- Python常用的数据文件存储的4种格式(txt/json/csv/excel)及操作Excel相关的第三方库(xlrd/xlwt/pandas/openpyxl)(2021最新版)
序言:保存数据的方式各种各样,最简单的方式是直接保存为文本文件,如TXT.JSON.CSV等,除此之外Excel也是现在比较流行的存储格式,通过这篇文章你也将掌握通过一些第三方库(xlrd/xlwt/ ...
- 性能工具之代码级性能测试工具ContiPerf
前言 做性能的同学一定遇到过这样的场景:应用级别的性能测试发现一个操作的响应时间很长,然后要花费很多时间去逐级排查,最后却发现罪魁祸首是代码中某个实现低效的底层算法.这种自上而下的逐级排查定位的方法, ...
- 端口扫描工具 nmap 使用手册
0x00 主机发现 -sL 仅仅是显示,扫描的IP数目,不会进行任何扫描 -sn ping扫描,即主机发现 -Pn 不检测主机存活 -PS/PA/PU/PY[portlist] TCP SYN Pin ...