Page Object实例 - Java + Selenium 登录163邮箱

Posted fayez

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Page Object实例 - Java + Selenium 登录163邮箱相关的知识,希望对你有一定的参考价值。

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这类信息暴露等问题, 之后一一解决.

 

以上是关于Page Object实例 - Java + Selenium 登录163邮箱的主要内容,如果未能解决你的问题,请参考以下文章

Selenium2(java)页面对象模型(Page Object) 八

Page Object 设计模式-PO

Page Object设计模式

JSP 内置对象的说明

JSP常用内置对象:pagepageContextconfigexception

java+Selenium+TestNg搭建自动化测试架构实现POM(page+Object+modal)