《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)

简介: 【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。

1.简介

上一篇宏哥用PageFactory实现了POM,宏哥再介绍一下如果不用PageFactory如何实现POM。

2.项目实战

在这里宏哥以百度首页登录的例子,如果用POM实现,在测试脚本中实际代码就几行。

2.1代码设计

1.先新建一个pageObjects包,然后在pageObjects包新建一个百度主页类:BaiduHomePage1,代码设计如下图所示:

2.再次新建一个testSuites包,然后在testSuites包下新建一个测试类:TestWithPOM1

2.2参考代码

1.BaiduHomePage1

package pageObjects;

 

import java.util.concurrent.TimeUnit;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

 

/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(八十八)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)

*

* 2022年3月20日

*/


public class BaiduHomePage1 {

   

   WebDriver driver;

   // 元素定位

   //登录链接

   By login_link = By.xpath("//*[@id='u1']/a[1]");

 

   //输入用户名框

   By inputBox_username = By.xpath("//*[@id='TANGRAM__PSP_11__userName']");

   

   //输入密码

   By inputBox_password = By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]");

   

   //登录按钮

   By login_submitBtn = By.id("TANGRAM__PSP_11__submit");

   

   // 业务逻辑和操作方法

   // 构造方法

   public BaiduHomePage1(WebDriver driver){

       this.driver = driver;

   }

   

   //点击登录链接

   public void clickLoginLink(){

       

       // 点击账户登录

       driver.findElement(login_link).click();

   }

   

   // 登录步骤拆分-输入用户名

   public void inputUsername(String username){

       driver.findElement(inputBox_username).sendKeys(username);

       

   }

   

   // 登录步骤拆分-输入密码

   public void inputPassword(String password){

       driver.findElement(inputBox_password).sendKeys(password);

       

   }

   

   // 点击登录按钮

   public void clickLoginBtn(){

       driver.findElement(login_submitBtn).click();

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

   }

   

   //重构一个登录方法

   public void login(String name, String pass){

       

       // 点击账户登录

       driver.findElement(login_link).click();

       

       driver.findElement(inputBox_username).sendKeys(name);

       driver.findElement(inputBox_password).sendKeys(pass);

       driver.findElement(login_submitBtn).click();

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

       

   }

 

}

2.TestWithPOM1

package testSuites;


import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.BeforeClass;

import org.testng.annotations.Test;


import pageObjects.BaiduHomePage1;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(八十八)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)

*

* 2022年3月20日

*/


public class TestWithPOM1 {

   

    WebDriver driver;

   

   @BeforeClass

   public void setUp() throws Exception{

       

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

      driver = new ChromeDriver();  

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

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

      Thread.sleep(2000);  

   }

   

   @Test

   public void testLogin() throws InterruptedException{

       

       BaiduHomePage1 hp = new BaiduHomePage1(driver);

       

       hp.clickLoginLink();

       Thread.sleep(2000);

       hp.inputUsername("user1");

       hp.inputPassword("123456");

       hp.clickLoginBtn();

       

   }


}

2.3运行代码

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

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

3.小结

宏哥在后续的框架中也会使用PageFactory,毕竟人家都封装好了,你可以用现成的,为啥还要自己费劲封装了。

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



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

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


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

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

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

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

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

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

Pycharm工具基础使用教程

目录
打赏
0
2
2
0
149
分享
相关文章
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
自动化淘宝秒杀:使用Selenium WebDriver的实战指南
本文详细介绍了如何利用Selenium WebDriver自动化淘宝秒杀操作,包括环境配置、代码实现及注意事项,旨在帮助读者提升秒杀成功率,同时提醒合理使用以遵守平台规则。
233 8
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
606 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
172 31
Selenium IDE:Web自动化测试的得力助手
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
101 6
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
68 4
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
806 2
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
98 5
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
109 0
[Java]23种设计模式

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等