Java&Selenium自动化测试之Page Object Model
PO是什么:
1、页面对象模型(PO)是一种设计模式,用来管理维护一组web元素的对象库
2、在PO下,应用程序的每一个页面都有一个对应的page class
3、每一个page class维护着该web页的元素集和操作这些元素的方法
其最终目的还是将页面对象(方法和元素)与测试代码分离,提高测试代码的可维护性、可扩展性及可复用性
该模式下要求对常量、变量、类、方法的命名有基本的规约,一目了然
====================================================================================================================================
如下为简单的代码,用于展示该模式
package PageObjects; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.Assert; public class LoginPage {
//使用FindBy注解,定位到要操作的页面元素, 此处用的xpath,也可以用其他的类型
@FindBy(xpath = "//*[@name='email']")
public WebElement userName;
@FindBy(xpath = "//*[@name='password']")
public WebElement passWord;
@FindBy(xpath = "//*[@id ='dologin']")
public WebElement loginButton;
public String url = "http://mail.126.com";
public String title= "网易免费邮箱";
public WebDriver driver;
//构造函数,生成浏览器对象,初始化PageFactory对象
public LoginPage(){
driver = new ChromeDriver();
PageFactory.initElements(driver, this);
}
public void load(){
this.driver.get(url);
}
public void quit(){
driver.quit();
}
public void login(){ driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='x-URS-iframe']")));
userName.sendKeys("davieyang99@126.com");
passWord.sendKeys("alex005x");
loginButton.click();
}
public WebDriver getDriver(){
return driver;
}
public void isLoaded()throws Error{
Assert.assertTrue(driver.getTitle().contains(title));
}
}
package TestScripts;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.openqa.selenium.WebDriver;
import PageObjects.LoginPage;
public class Test126mail {
private WebDriver driver;
/*private String baseUrl="http://mail.126.com";
@BeforeMethod
public void beforeMethod(){
driver = new ChromeDriver();
}*/
@Test
public void testLogin() throws InterruptedException {
LoginPage loginpage = new LoginPage();
loginpage.load();
Thread.sleep(1000);
loginpage.login();
Thread.sleep(3000);
/*
loginpage.userName.sendKeys("davieyang99");
loginpage.passWord.sendKeys("alex005x");
loginpage.loginButton.click();
*/
Assert.assertTrue(loginpage.getDriver().getPageSource().contains("邮件"));
loginpage.quit();
}
/*@AfterMethod
public void afterMethod(){
driver.quit();
}*/
}
Java&Selenium自动化测试之Page Object Model的更多相关文章
- Python+Selenium框架设计--- Page Object Model
POM(Page Object Model):页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想.采用POM的目的,是为了解决前端中UI变 ...
- Java&Selenium自动化测试之数据驱动
一.摘要 本片博文以四个方式展示自动化测试的数据驱动,数组.CSV.Excel.Mysql 二.TestNG&Csv&Driven package testNGWithDataDriv ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- Page Object Model (Selenium, Python)
时间 2015-06-15 00:11:56 Qxf2 blog 原文 http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...
- selenium page object model
Page Object Model (POM) & Page Factory in Selenium: Ultimate Guide 来源:http://www.guru99.com/page ...
- Selenium的PO模式(Page Object Model)[python版]
Page Object Model 简称POM 普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...
- Selenium自动化测试之数据驱动及用例管理
Selenium自动化测试之数据驱动及用例管理 一.TestNg注解介绍 @Test:表示一个测试方法,在运行测试用例过程中,会自动运行@Test注解的方法. 例:
- Selenium自动化测试之启动浏览器
Selenium自动化测试之启动浏览器 一.Eclipse新建java工程 1.新建java工程:File->New->Java Project,输入Project name:如AutoT ...
- selenium自动化测试之整合测试报告
selenium自动化测试之整合测试报告 标签(空格分隔): 整合报告 如下截图我们添加一个文件叫做:latest_report.py文件, import time import os import ...
随机推荐
- [LeetCode] 381. Insert Delete GetRandom O(1) - Duplicates allowed 插入删除和获得随机数O(1)时间 - 允许重复
Design a data structure that supports all following operations in average O(1) time. Note: Duplicate ...
- [LeetCode] 461. Hamming Distance 汉明距离
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- WARNING:Your password has expired --linux 用户密码过期
今天在ssh 提示 WARNING:Your password has expired 设置用户到期时间 chage -M 36000 用户名 chage -l 用户名 #查看用户信息
- java并发-ReentrantLock的lock和lockInterruptibly的区别
ReentrantLock的加锁方法Lock()提供了无条件地轮询获取锁的方式,lockInterruptibly()提供了可中断的锁获取方式.这两个方法的区别在哪里呢?通过分析源码可以知道lock方 ...
- mysql 的日期和时间函数
执行函数方式 select 函数 函数名称 函 数 功 能 CURDATE() 获取当前日期 CURTIME() 获取当前时间 NOW() 获取当前的日期和时间 UNIX_TIMESTAMP ...
- Fedora30 install VS Code
We currently ship the stable 64-bit VS Code in a yum repository, the following script will install t ...
- Find the median(线段树+离散化)(2019牛客暑期多校训练营(第七场))
题目出处:Find the median 示例: 输入: 53 1 4 1 5 92 7 1 8 2 9 输出:3 4 5 4 5 说明:L = [3, 2 ,4, 1, 7],R = [4, 8, ...
- leetcode整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321 示例 3: 输入: 120输出: 21 ...
- [LOJ2537] [PKUWC2018] Minimax
题目链接 LOJ:https://loj.ac/problem/2537 洛谷:https://www.luogu.org/problemnew/show/P5298 Solution 不定期诈尸 好 ...
- 【题解】Luogu P4910 帕秋莉的手环
原题传送门 "连续的两个中至少有1个金的"珂以理解为"不能有两个木相连" 我们考虑一个一个将元素加入手环 设f\([i][0/1]\)表示长度为\(i\)手环末 ...