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


相关文章
|
1天前
|
Web App开发 XML 安全
《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)
【6月更文挑战第14天】本文介绍了如何使用TestNg进行自动化测试,特别是通过变量参数启动不同浏览器的步骤。
13 5
|
2天前
|
监控 Java 测试技术
《手把手教你》系列基础篇(七十二)-java+ selenium自动化测试-框架设计基础-TestNG简单介绍(详解教程)
【6月更文挑战第13天】本文介绍了TestNG单元测试框架,它是一个灵感来源于JUnit和NUnit的测试框架,支持多种级别的测试,如单元测试、集成测试等。TestNG的特点包括丰富的注解、数据驱动测试、变量支持、自动生成HTML测试报告等。与JUnit和NUnit相比,TestNG在某些功能上更为强大。文章还详细讲解了如何在Eclipse中安装TestNG插件,提供了在线安装、更新站点安装和离线安装三种方法,并展示了安装成功的验证步骤。最后,通过一个项目实战案例展示了如何使用TestNG编写和运行测试代码。
12 2
|
3天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)
【6月更文挑战第12天】本文介绍了如何创建一个自定义类库来解决自动化测试中的元素同步问题。作者指出,大部分错误源于元素因时间不同步而引发,为此提供了一种解决方案。在项目实践中,首先在`library`包下创建名为`MyWait`的类,包含一个方法`isElementPresent`,该方法通过循环尝试并等待指定元素出现,避免了直接使用时间等待可能导致的不准确性。之后,在测试类中调用此自定义方法,成功实现了元素同步。代码示例展示了如何在Java+Selenium自动化测试中应用这个自定义类。
27 2
|
4天前
|
XML Web App开发 Java
《手把手教你》系列技巧篇(七十)-java+ selenium自动化测试-Java中如何读取properties配置文件内容(详解教程)
【6月更文挑战第11天】本文介绍了Java自动化测试中读取properties配置文件的方法。文章首先说明了为何要将配置参数放在properties文件中,然后简述了properties文件的作用和常用的读取方式,包括通过`java.util.Properties`类和`java.util.ResourceBundle`类。接着详细列举了`Properties`类的主要方法,如`getProperty()`、`load()`、`setProperty()`和`store()`等。
12 1
|
5天前
|
存储 Java 测试技术
《手把手教你》系列技巧篇(六十九)-java+ selenium自动化测试 - 读取csv文件(详细教程)
【6月更文挑战第10天】本文介绍了如何在Java中读取CSV文件。首先解释了CSV是逗号分隔值的文本文件,常用于数据交换。接着,在项目实战部分,详细说明了如何通过下载并引入opencsv库来读取CSV文件:包括下载jar包、添加到Eclipse项目、创建CSV文件、编写Java代码读取文件内容,并展示了代码执行后的输出结果。文章以一个简单的代码示例展示了如何使用opencsv读取CSV文件中的数据。
10 0
|
6天前
|
数据采集 Web App开发 前端开发
Selenium:自动化Web浏览器操作的强大工具
**Selenium** 是一款用于自动化Web应用测试和模拟用户行为的工具,支持多种浏览器和编程语言。安装包括安装Selenium库和对应浏览器的WebDriver。基本用法包括导入库、启动浏览器、查找与操作页面元素、等待元素加载及关闭浏览器。在实际项目中,Selenium常用于Web测试、爬虫、自动化表单填写等,优点是跨平台、模拟真实用户行为,但性能较低且依赖浏览器。
24 9
|
6天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
【6月更文挑战第9天】本文介绍了如何使用Java处理Excel文件中的不同数据类型,包括日期、数字、布尔值和标签(常规字符串)。文章提供了两个示例,分别使用JXL库和Apache POI库来读取Excel文件。
9 1
|
6天前
|
XML Java 测试技术
《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)
【6月更文挑战第8天】本文介绍了Java中操作Excel的工具,包括POI和JXL。POI支持处理Office 2003及以下的OLE2格式(.xls)和2007以上的OOXML格式(.xlsx)。而JXL只能处理2003版本的Excel文件。文章详细讲解了如何下载和使用JXL库,并给出了一个简单的Java代码示例,展示如何读取2003版Excel文件中的数据。在实际项目中,由于JXL对新版本Excel的支持限制,通常推荐使用POI。
22 5
|
8天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
【6月更文挑战第7天】本文介绍了在Java自动化测试中如何操作Excel数据。文章提到了当测试数据存储在Excel文件时,可以使用Apache的POI库来读写Excel。POI提供了对OLE2(.xls)和OOXML(.xlsx)格式的支持,比JXL库功能更全面。文章还详细讲解了如何下载和添加POI库到项目中,以及准备测试用的Excel文件。最后,给出了一个简单的Java代码示例,演示如何读取Excel文件的内容。
13 1
|
9天前
|
前端开发
selenium自动化详解
selenium自动化详解