zoukankan      html  css  js  c++  java
  • Page Object实例(一) Java + Selenium 登录163邮箱

    Page Object 是什么:

      Page Object(selenium wiki)是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     public HomePage login(String user, String pwd) {
    15         //隐式等待页面的加载
    16         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    17         WebElement accountLogin = driver.findElement(By.id("lbNormal"));
    18         accountLogin.click();
    19         //进入frame
    20         List<WebElement> iframes = driver.findElements(By.tagName("iframe"));
    21         String id = iframes.get(0).getAttribute("id");
    22         if (id != null) {
    23             driver.switchTo().frame(id);
    24         }
    25         WebElement loginEmail = driver.findElement(By.name("email"));
    26         WebElement loginPassword = driver.findElement(By.name("password"));
    27         WebElement loginButton = driver.findElement(By.id("dologin"));
    28         loginEmail.sendKeys(user);
    29         loginPassword.sendKeys(pwd);
    30         loginButton.click();
    31         //跳出frame
    32         driver.switchTo().defaultContent();
    33         //登录成功后跳转到新页面, 新页面的元素及处理和当前页面分离
    34         return new HomePage(driver);
    35     }
    36 }

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

  • 相关阅读:
    虚拟机的类加载机制
    数组
    Intellij快捷键
    Wireshark过滤器语法设置
    Git命令(转)
    Git命令
    字节码指令简介(转)
    Java异常了解
    Class类文件的结构
    垃圾收集器与内存分配策略(六)之内存分配与回收策略
  • 原文地址:https://www.cnblogs.com/fayez/p/11702727.html
Copyright © 2011-2022 走看看