《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)

简介: 【6月更文挑战第12天】本文介绍了如何创建一个自定义类库来解决自动化测试中的元素同步问题。作者指出,大部分错误源于元素因时间不同步而引发,为此提供了一种解决方案。在项目实践中,首先在`library`包下创建名为`MyWait`的类,包含一个方法`isElementPresent`,该方法通过循环尝试并等待指定元素出现,避免了直接使用时间等待可能导致的不准确性。之后,在测试类中调用此自定义方法,成功实现了元素同步。代码示例展示了如何在Java+Selenium自动化测试中应用这个自定义类。

1.简介

前面宏哥介绍了几种关于时间等待的方法,也提到了,在实际自动化测试脚本开发过程,百分之90的报错是和元素因为时间不同步而发生报错。本文介绍如何新建一个自定义的类库来解决这个元素同步问题。这样,我们在写脚本的时候,就直接调用该类方法就可以。

2.项目实战

2.1代码设计

1.在新包library下新建我们的自定义类方法。如下图所示:

2.2参考代码

package library;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;




/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)

*

* 2022年2月19日

*/



/**

*

* @ClassName: MyWait

* @Description: 获取页面元素

* @date: 2022年02月19日 上午19:56:00

* @version: 1.0.0

*/

public class MyWait {

   

   /**

   *

   * @Title: isElementPresent

   * @Description: 当前页面是否存在元素

   * @param driver

   * @param xpath

   * @param time

   * @return WebElement

   * @throws

   */

   public static WebElement isElementPresent(WebDriver driver, String xpath, int time){

       WebElement ele = null;

       

       for(int i=0;i<time;i++){

           try{

               

               ele = driver.findElement(By.xpath(xpath));

               break;

           } catch(Exception e){

               try{

                   Thread.sleep(1000);

               } catch(InterruptedException e1){

                   System.out.println("Waiting for element to appear on DOM");

               }

           }

       }

       return ele;

   }


}

3.调用自定义类

3.1代码设计

在脚本中调用我们的元素同步方法,在另外一个包lessons下新建一个测试类,测试调用类方法。

3.2参考代码

package lessons;


import java.util.concurrent.TimeUnit;


import library.MyWait;


import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)

*

* 2022年2月19日

*/


public class TestMyWait {

   

   public static void main(String[] args){

       

       System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");

       

       WebDriver driver = new ChromeDriver();

       driver.manage().window().maximize();

       

       driver.get("https://www.baidu.com");

       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  

       

        // 查询框输入框输入字段

       //driver.switchTo().frame("aid-auth-widget");

       MyWait.isElementPresent(driver, ".//*[@id='kw']", 10).sendKeys("tester");

       

       // 密码输入框输入字段

       MyWait.isElementPresent(driver, ".//*[@id='pwd']", 10).sendKeys("123456");

       

   }


}

3.3运行代码

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

上面两个输入框调用了我们自定义的方法,根据元素xpath去定位元素,在10秒之内不断循环去定义该元素,如果在页面出现,就可以定位成功,否则抛出异常。

由于百度页面有查询输入框定位成功,但是没有后边的密码输入框,所以代码抛出异常。

4.小结

好了,时间也不早了,今天就分享和讲解到这里,希望对您有所帮助,感谢您耐心地阅读!


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


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


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

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

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

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

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

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

Pycharm工具基础使用教程

相关文章
|
1天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)
【6月更文挑战第21天】本文介绍了TestNG中测试方法的依赖执行顺序。作者通过一个实际的自动化测试场景展示了如何设计测试用例:依次打开百度、搜索“selenium”、再搜索“selenium+java”。代码示例中,`@Test`注解的`dependsOnMethods`属性用于指定方法间的依赖,确保执行顺序。如果不设置依赖,TestNG会按方法名首字母排序执行。通过运行代码,验证了依赖关系的正确性。
19 4
|
22小时前
|
Java API 索引
java中String类常用API
java中String类常用API
|
1天前
|
存储 Java C语言
Java面向对象课程设计--类管理系统
Java面向对象课程设计--类管理系统
11 1
|
1天前
|
Java
2021蓝桥杯大赛软件类省赛Java大学B组 时间显示
2021蓝桥杯大赛软件类省赛Java大学B组 时间显示
7 0
2021蓝桥杯大赛软件类省赛Java大学B组 时间显示
|
21小时前
|
Java API 索引
java中ArrayList类常用API
java中ArrayList类常用API
|
23小时前
|
Java
杭电acm1201 18岁生日 Java解法 时间类
杭电acm1201 18岁生日 Java解法 时间类
5 0
|
23小时前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
7 0
|
1天前
|
Java
2020蓝桥杯大赛软件类省赛Java大学B组 寻找2020
2020蓝桥杯大赛软件类省赛Java大学B组 寻找2020
9 0
|
1天前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
8 0
|
1天前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
5 0