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

简介: 【5月更文挑战第12天】本文介绍了WebDriver中用于判断元素状态的三个方法:`isEnabled()`、`isSelected()`和`isDisplayed()`。`isSelected()`检查元素是否被选中,通常用于勾选框。`isDisplayed()`则用来判断元素是否在页面上可见。`isEnabled()`方法确定元素是否可操作,例如是否能点击或输入内容。

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.

*

* See https://w3c.github.io/webdriver/#is-element-enabled">W3C WebDriver specification

* for more details.

*

* @return True if the element is enabled, false otherwise.

*/

boolean isEnabled();

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

3.isEnabled()用法

List 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();  

   //自定义一个判断页面元素是否存在的函数或者方法IsElementPresent

   private boolean IsElementPresent(By by){

       try{

           //如果传入的参数by能够找到页面元素,则函数返回“true”,表示成功

           //找到页面元素

           driver.findElement(by);

           return true;

       }catch(NoSuchElementException e){

           //如果传入的参数by没有找到页面元素,则函数返回“false”,

           //表示没有成功的找到页面元素

           return false;

       }

   }


   @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.4运行代码

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

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




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

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


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

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

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

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

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

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

Pycharm工具基础使用教程


相关文章
|
12天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
62 19
Selenium IDE:Web自动化测试的得力助手
|
14天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
78 26
|
20天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
20天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
27天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
30 2
|
19天前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
36 0
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
13 0
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
78 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
66 4
|
24天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####