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

简介: 【7月更文挑战第11天】页面对象模型(POM)通过Page Factory在Java Selenium测试中被应用,简化了代码维护。在POM中,每个网页对应一个Page Class,其中包含页面元素和相关操作。对比之下,非POM实现直接在测试脚本中处理元素定位和交互,代码可读性和可维护性较低。

1.简介

上一篇介绍了POM的基础理论知识和非POM方式写脚本,这篇介绍利用页面工厂类(page factory)去实现POM,通过查看PageFactory类,我们可以知道它是一个初始化一个页面实例的功能,在实例化该页面对象时候,也会一起实例化该页面的元素定位。

2.项目实战

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

2.1代码设计

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

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

2.2参考代码

1.BaiduHomePage

package pageObjects;


import org.openqa.selenium.WebElement;

import org.openqa.selenium.support.FindBy;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

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

*

* 2022年3月20日

*/


public class BaiduHomePage {


   // 元素定位

   // 登录按钮

   @FindBy(xpath="//*[@id='u1']/a[1]")

   WebElement login_link;


   // 输入用户名框

   @FindBy(xpath="//*[@id='TANGRAM__PSP_11__userName']")

   WebElement inputBox_username;


   // 输入密码

   @FindBy(xpath="//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]")

   WebElement inputBox_password;


   // 登录按钮

   @FindBy(id = "TANGRAM__PSP_11__submit")

   WebElement login_submitBtn;


   // 业务逻辑和操作方法


   // 登录方法

   public void login(String username, String password) throws InterruptedException {


       login_link.click();

       Thread.sleep(3000);

       inputBox_username.sendKeys(username);

       inputBox_password.sendKeys(password);

       login_submitBtn.click();


   }


}

2.TestWithPOM

package testSuites;


import org.testng.annotations.Test;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.support.PageFactory;

import org.testng.annotations.BeforeClass;


import pageObjects.BaiduHomePage;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

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

*

* 2022年3月20日

*/


public class TestWithPOM {

   

   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{

       

       BaiduHomePage hp = PageFactory.initElements(driver, BaiduHomePage.class);

       hp.login("user1", "123456");

   }

   

 

}

2.3运行代码

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

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

3.非POM实现

下面跟随宏哥看一下不用POM怎么实现登录百度首页。

3.1代码设计

3.2参考代码

package testSuites;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.AfterClass;

import org.testng.annotations.BeforeClass;

import org.testng.annotations.Test;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

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

*

* 2022年3月20日

*/


public class TestWithoutPOM {

   

   WebDriver driver;

   

   @BeforeClass

   public void setUp() throws Exception{

       

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

       driver = new ChromeDriver();

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

       

   }

   

   @Test

   public void testBaidu() throws InterruptedException {

       

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

       Thread.sleep(2000);

       Thread.sleep(3000);

       // click login link

       // 元素定位

       // 登录按钮

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

       Thread.sleep(2000);

       // 输入用户名框

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

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__userName']")).sendKeys("user1");

       Thread.sleep(2000);

       // 输入密码

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

       driver.findElement(By.xpath("//*[@id='TANGRAM__PSP_11__passwordWrapper']/input[2]")).sendKeys("123456");

       // 登录按钮

       driver.findElement(By.id("TANGRAM__PSP_11__submit")).click();


   }

   

   @AfterClass

   public void tearDown(){

       

       driver.quit();

   }

 

}

3.3运行代码

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

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

4.小结

好了今天主要介绍和讲解了百度首页登录使用POM和不使用POM。二者的优缺点一目了然,宏哥在这里就不多说了,今天就到这里了,感谢您耐心的阅读!!!

相关文章
|
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
|
2月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
2月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
25天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
28 0
|
2月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
3月前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
3月前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
50 3

热门文章

最新文章