《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-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。二者的优缺点一目了然,宏哥在这里就不多说了,今天就到这里了,感谢您耐心的阅读!!!
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的
本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
公众号(关注宏哥)                                                                                 客服微信