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。二者的优缺点一目了然,宏哥在这里就不多说了,今天就到这里了,感谢您耐心的阅读!!!

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

  1. 《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)

    1.简介 页面对象模型(Page Object Model)在Selenium Webdriver自动化测试中使用非常流行和受欢迎,作为自动化测试工程师应该至少听说过POM这个概念.本篇介绍POM的简 ...

  2. 《手把手教你》系列基础篇(八十三)-java+ selenium自动化测试-框架设计基础-TestNG测试报告-下篇(详解教程)

    1.简介 其实前边好像简单的提到过测试报告,宏哥觉得这部分比较重要,就着重讲解和介绍一下.报告是任何测试执行中最重要的部分,因为它可以帮助用户了解测试执行的结果.失败点和失败原因.另一方面,日志记录对 ...

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

    1.简介 上一篇宏哥用PageFactory实现了POM,宏哥再介绍一下如果不用PageFactory如何实现POM. 2.项目实战 在这里宏哥以百度首页登录的例子,如果用POM实现,在测试脚本中实际 ...

  4. 《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)

    1.简介 今天主要是讲解和分享:TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用dependsOnMethods,testNG会自动根据@Test方法名称 ...

  5. 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)

    1.简介 本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.拖拽操 ...

  6. 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

    1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...

  7. 《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)

    1.简介 在实际工作中,我们需要对处理的元素进行高亮显示,或者有时候为了看清楚做跟踪鼠标点击了哪些元素需要标记出来.今天宏哥就在这里把这种测试场景讲解和分享一下. 2.用法 创建一个执行 JS 的对象 ...

  8. 《手把手教你》系列技巧篇(二十七)-java+ selenium自动化测试- quit和close的区别(详解教程)

    1.简介 尽管有的小伙伴或者童鞋们觉得很简单,不就是关闭退出浏览器,但是宏哥还是把两个方法的区别说一下,不然遇到坑后根本不会想到是这里的问题. 2.源码 本文介绍webdriver中关于浏览器退出操作 ...

  9. 《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)

    1.简介 上一篇宏哥介绍是如何使用logback将日志输出到控制台中,但是如果需要发给相关人需要你拷贝出来,有时候由于控制台窗口的限制,有部分日志将会无法查看,因此我们还是需要将日志输出到文件中,因此 ...

随机推荐

  1. [WC2016]挑战NPC(一般图最大匹配)

    [WC2016]挑战NPC(一般图最大匹配) Luogu 题解时间 思路十分有趣. 考虑一个筐只有不多于一个球才有1的贡献代表什么. 很明显等效于有至少两个位置没有被匹配时有1的贡献. 进而可以构造如 ...

  2. Homebrew安装环境

    p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatures: no-c ...

  3. spring-boot-learning-MongoDB

    NoSQL可以极大提高互联网系统的性能,但是它有一些致命的缺陷,其中最为严重的就是计算功能卡分有限,例如,在一个10 万数据量的List 中,我只需要满足特定条件的元素在Red is 中,使用集合或者 ...

  4. memcached 最大的优势是什么?

    Memcached 最大的好处就是它带来了极佳的水平可扩展性,特别是在一个巨大的 系统中.由于客户端自己做了一次哈希,那么我们很容易增加大量 memcached 到集群中.memcached 之间没有 ...

  5. hadoop 分布式系统与Hadoop MapReduce

    Hadoop分为两部分 Hadoop MapReduce和Hadoop分布式文件系统 1分布式系统由Master Node 和多台 slave Node组成. 1.1MasterNode Master ...

  6. Python - 本地文件读写(初级)

  7. carsim笔记——道路设置

    第一步: 进入道路轨迹设置 道路情况设置举例 第二步:设置道路3D的显示效果 对上面的解释举例说明

  8. 一个模仿微信群聊的H5页面

    开始 上半年小米Max发布的时候,做了一个在朋友圈传播的模仿微信的群聊界面H5页面:一群公司的大咖在群里聊小米Max,用户可以向大咖们提问,以此了解产品. 页面的主体是群聊对话,同时在对话中包含了很多 ...

  9. 【Python】Python基础知识【第一版】

    变量 print("-------------输出语句-------------"); message="Hello Python world"; print( ...

  10. python pymysql连接数据库并创建表

    之前看菜鸟教程 #!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost"," ...