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

本文主要是介绍《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.简介

webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelected表示查看元素是否被选中,一般用在勾选框中(多选或者单选),isDisplayed表示查看选中是否可见。isEnabled表示查什么呢?isEnabled表示查看元素是否可以进行操作,比如,点击,输入等。

2.isEnabled()源码

/**
* Is the element currently enabled or not? This will generally return true for everything but
* disabled input elements.
* <p>
* See <a href="https://w3c.github.io/webdriver/#is-element-enabled">W3C WebDriver specification</a>
* for more details.
*
* @return True if the element is enabled, false otherwise.
*/
boolean isEnabled();

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

3.isEnabled()用法

List<WebElement> targetElement =  driver.findElements(By.xpath("xpath_your_expected_element"));try {if(targetElement>=1) {if(targetElement.isEnabled()) {System.out.println("Element is operable");}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.项目实战

 宏哥这里用度娘的首页搜索输入框举例,判断这个搜索输入框是否可以输入内容,然后利用JavaScript加上属性readonly后,再次判断是否可以输入内容,对你没看错就是这么玩。

4.1测试用例(思路)

1.访问度娘首页

2.定位搜索输入框,判断其是否可以操作(输入搜索内容)

3.给搜索输入框通过JavaScript添加readonly属性

4.再次判断搜索输入框是否可以操作(输入搜索内容)

4.2代码设计

4.3参考代码
package lessons;import java.util.concurrent.TimeUnit;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自动化测试-判断元素是否可操作(详解教程)** 2021年11月20日*/
public class testEnabled {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/");  WebElement searchInputBox = driver.findElement(By.id("kw"));if(searchInputBox.isEnabled()==true){System.out.println("百度首页的搜索输入框可以输入内容!");}//给搜索输入框通过JavaScript添加disable属性JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;String js = "document.getElementById('kw').setAttribute('disabled', '')"; jsExecutor.executeScript(js);Thread.sleep(5000);WebElement searchInputBox1 = driver.findElement(By.className("s_ipt"));//再次判断搜索输入框是否可以操作(输入搜索内容)if(!searchInputBox1.isEnabled()){System.out.println("百度首页的搜索输入框不可以输入内容!");}driver.quit();}}
4.4运行代码

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

2.运行代码后电脑端的浏览器的动作(宏哥点击输入框也不允许输入内容),如下小视频所示:

3.可能小伙伴后者童鞋们没有注意宏哥在录屏中点击输入框,通过JavaScript给输入框加入不可操作属性,宏哥在这里演示一下,仍然给输入框输入内容就会报如下错误:element not interactable(元素不可交互)。如下图所示:

4.当然了你也可以通过F12查看元素已经加上了不可以操作的属性,如下图所示:

5.小结

  好了,今天时间也不早了,宏哥就分享到这里,感谢您耐心地阅读。

6.拓展

如果你不想用或者觉得selenium自带的API不能满足你的要求,你也可以根据自己的需要定义一个API,然后进行调用使用。

 6.1自定义的API
//自定义一个判断页面元素是否存在的函数或者方法IsElementPresent
private boolean IsElementPresent(By by){try{//如果传入的参数by能够找到页面元素,则函数返回“true”,表示成功//找到页面元素driver.findElement(by);return true;}catch(NoSuchElementException e){//如果传入的参数by没有找到页面元素,则函数返回“false”,//表示没有成功的找到页面元素return false;}
}
6.2测试方法
@Test
public void testIsElement1(){driver.manage().window().maximize();  driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);//访问搜狗首页driver.get("http://www.baidu.com");//调用ISElementPresent函数,查找ID为“query”的页面元素对象if(IsElementPresent(By.id("kw"))){//如果定位到页面元素,则把页面元素对象存储到searchInputBox变量中WebElement searchInputBox = driver.findElement(By.id("kw"));/*判断searchInputBox变量对象是否处于可用状态。如果处于可用状态,则输入“搜狗首页的搜索输入框被成功找到!”*/if(searchInputBox.isEnabled()==true){searchInputBox.sendKeys("百度首页的搜索输入框被成功找到!");}}else{//如果首页输入框元素未被找到。则将此测试用例的设置为失败状态//打印失败原因Assert.fail("页面上的输入框元素未被找到!");}
}
6.3参考代码
package lessons;import java.util.concurrent.TimeUnit;import junit.framework.Assert;import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;/*** @author: 北京-宏哥* * @公众号:北京宏哥(微信搜索,关注宏哥,提前解锁更多测试干货)* * 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)** 2021年11月20日*/
public class testIsElement {WebDriver driver = new ChromeDriver();  //自定义一个判断页面元素是否存在的函数或者方法IsElementPresentprivate boolean IsElementPresent(By by){try{//如果传入的参数by能够找到页面元素,则函数返回“true”,表示成功//找到页面元素driver.findElement(by);return true;}catch(NoSuchElementException e){//如果传入的参数by没有找到页面元素,则函数返回“false”,//表示没有成功的找到页面元素return false;}}@Testpublic void testIsElement1(){driver.manage().window().maximize();  driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);//访问搜狗首页driver.get("http://www.baidu.com");//调用ISElementPresent函数,查找ID为“query”的页面元素对象if(IsElementPresent(By.id("kw"))){//如果定位到页面元素,则把页面元素对象存储到searchInputBox变量中WebElement searchInputBox = driver.findElement(By.id("kw"));/*判断searchInputBox变量对象是否处于可用状态。如果处于可用状态,则输入“搜狗首页的搜索输入框被成功找到!”*/if(searchInputBox.isEnabled()==true){searchInputBox.sendKeys("百度首页的搜索输入框被成功找到!");}}else{//如果首页输入框元素未被找到。则将此测试用例的设置为失败状态//打印失败原因Assert.fail("页面上的输入框元素未被找到!");}}}
6.4运行代码

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

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

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

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问)或者微信搜索: 北京宏哥  公众号提前解锁更多干货。

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

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

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

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

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

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

Pycharm工具基础使用教程

这篇关于《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835808

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash