《手把手教你》系列技巧篇(四十八)-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工具基础使用教程


相关文章
|
2月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
161 2
|
2月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
45 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
33 5
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
51 1
|
2月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
1月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
44 0
|
2月前
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
43 0
|
2月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
32 0
|
2月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
142 5

热门文章

最新文章

下一篇
DataWorks