Page Object 是什么:
Page Object是Selenium2开始提供的一种代码设计模式. 其核心思想是把web页面的元素查找及操作和页面测试分离开. 这样之后的更新和维护中如果有页面元素变动, 不需要修改测试类, 只要修改其对应的页面元素的查找代码即可.
登录163邮箱的实例包括:
其中:
1. LoginPage.java 是主要测试页面, 包括查找元素, 操作元素实现登录
2. HomePage.java 是登录成功后会跳转到的页面, 在此用来作为登录操作方法的返回值及拿个元素验证登录成功, 更多的是可以接着对此页面进行测试
3. LoginTest.java用来执行登录页面的测试, 可以包括验证登录成功/失败或其他测试用例
4. SeleniumInit.java 用来起driver, 里面可以放起不同浏览器的方法
实例代码:
LoginPage.java
1 import org.openqa.selenium.By; 2 import org.openqa.selenium.WebDriver; 3 import org.openqa.selenium.WebElement; 4 import java.util.List; 5 import java.util.concurrent.TimeUnit; 6 7 public class LoginPage { 8 WebDriver driver; 9 10 public LoginPage(WebDriver driver) { 11 this.driver = driver; 12 } 13 14 //登录方法 15 public HomePage login(String user, String pwd) { 16 //隐式等待页面的加载 17 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 18 WebElement accountLogin = driver.findElement(By.id("lbNormal")); 19 accountLogin.click(); 20 //进入frame 21 List<WebElement> iframes = driver.findElements(By.tagName("iframe")); 22 String id = iframes.get(0).getAttribute("id"); 23 if (id != null) { 24 driver.switchTo().frame(id); 25 } 26 WebElement loginEmail = driver.findElement(By.name("email")); 27 WebElement loginPassword = driver.findElement(By.name("password")); 28 WebElement loginButton = driver.findElement(By.id("dologin")); 29 loginEmail.sendKeys(user); 30 loginPassword.sendKeys(pwd); 31 loginButton.click(); 32 //跳出frame 33 driver.switchTo().defaultContent(); 34 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 35 //登录成功后跳转到新页面, 新页面的元素及处理和当前页面分离 36 return new HomePage(driver); 37 } 38 }
HomePage.java
1 import org.openqa.selenium.By; 2 import org.openqa.selenium.WebDriver; 3 import org.openqa.selenium.WebElement; 4 5 public class HomePage { 6 WebDriver driver; 7 8 public HomePage(WebDriver driver) { 9 this.driver = driver; 10 } 11 12 //判断登录是否成功的方法, 当前页面类似收发邮件可另加方法 13 public boolean idExists() { 14 WebElement userID = driver.findElement(By.id("spnUid")); 15 System.out.println(userID.getText()); 16 return userID.isDisplayed(); 17 } 18 }
LoginTest.java
1 import org.openqa.selenium.WebDriver; 2 import org.openqa.selenium.support.PageFactory; 3 import org.testng.Assert; 4 import org.testng.annotations.Test; 5 import po.selenium.pages.HomePage; 6 import po.selenium.pages.LoginPage; 7 import po.selenium.utils.SeleniumInit; 8 9 public class LoginTest { 10 String URL = "https://mail.163.com/"; 11 @Test 12 public void TC001_LoginSuccess() { 13 String user = "邮箱账号"; 14 String pwd = "邮箱密码"; 15 SeleniumInit seleniumInit = new SeleniumInit(); 16 WebDriver driver = seleniumInit.getFFDriver(); 17 try { 18 driver.get(URL); 19 LoginPage loginPage = new LoginPage(driver); 20 PageFactory.initElements(driver, loginPage); 21 HomePage homePage = loginPage.login(user, pwd); 22 Assert.assertTrue(homePage.idExists(), "login failed"); 23 } catch (Exception e) { 24 e.printStackTrace(); 25 } finally { 26 driver.quit(); 27 } 28 } 29 30 @Test 31 public void TC002_LoginFailedWithWrongPwd() { 32 String user = "邮箱账号"; 33 String pwd = "错误的邮箱密码"; 34 SeleniumInit seleniumInit = new SeleniumInit(); 35 WebDriver driver = seleniumInit.getFFDriver(); 36 try { 37 driver.get(URL); 38 LoginPage loginPage = new LoginPage(driver); 39 PageFactory.initElements(driver, loginPage); 40 //同一个页面, 同一个方法可以进行不同的测试 41 HomePage homePage = loginPage.login(user, pwd); 42 Assert.assertTrue(homePage.idExists(), "login failed"); 43 } catch (Exception e) { 44 e.printStackTrace(); 45 } finally { 46 driver.quit(); 47 } 48 } 49 }
以上就是Page Object 的页面与操作与测试分离的思想, 主要用来展示页面分离的思想, 还有类似页面元素和操作耦合在一起, URL这类信息暴露等问题, 之后一一解决.
原文地址:https://www.cnblogs.com/fayez/p/11702727.html
时间: 2024-10-25 08:23:46