《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
阅读原文时间:2022年04月22日阅读:1

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