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

相关文章
|
26天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
26天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
26天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
12天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
10 0
|
25天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
28 0
|
12天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
3天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
3天前
|
安全 Java 开发者
Java中的多线程编程:从基础到实践
本文深入探讨了Java多线程编程的核心概念和实践技巧,旨在帮助读者理解多线程的工作原理,掌握线程的创建、管理和同步机制。通过具体示例和最佳实践,本文展示了如何在Java应用中有效地利用多线程技术,提高程序性能和响应速度。
24 1
|
11天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。