selenium-webdriver|12 page-object模式介绍

Page-object思想介绍

PageObject 就是页面对象,是一种程序设计模式,将面向过程转变为面向对象,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。

为什么要使用page-object?

可以使代码复用,集中管理元素对象,降低维护成本,提高程序可读性和编写效率。

使用page-object使脚本分层及实战

PageObject应该怎么使用呢?基于测试实践,我们一般这样应用:

把页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),把UI自动化分为了对象库层,操作层和业务层。PO思想对界面交互细节进行了封装,这样可以使测试案例更关注业务,而非界面细节,提高了测试用例的可读性 把每个要测试的对象封装在一个page内, 这个page里包含这个对象可能的所有操作。

通过FindBy每一个页面元素都被定义为一个类中的私有变量

对页面元素的初始化

PageFactory.initElements(driver,this);

如下是以测试邦网址为例实现page-object分层

直接看代码

1、page基类

package com.testerbang.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

import com.testerbang.utils.TestNGListener;

public class Page {
  public WebDriver driver;
  
  public Page(WebDriver driver) {
    this.driver = driver;
    PageFactory.initElements(driver, this);//

  }
}

2、页面page类

package com.testerbang.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class Mys extends Page{
    
  public Mys(WebDriver driver) {
    super(driver);
    // TODO Auto-generated constructor stub
  }

  //发布博文
  @FindBy(linkText="发布博文")
  private  WebElement release;
    
  
  public  void openReleaseLink() {

    release.click();

  }
  }

3、test类

package com.testerbang.testng;

import org.testng.annotations.Test;
import com.testerbang.pages.Mys;
import com.testerbang.pages.Page;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.AfterTest;

public class ArticleAction {

  public WebDriver driver;
  public static String currentPath = System.getProperty("user.dir");

  @Test
  @Parameters({"session_user","JSESSIONID"})
  public void login(String session_user,String JSESSIONID) {
    driver.manage().deleteAllCookies();
    Cookie ck1 = new Cookie("JSESSIONID",
    JSESSIONID);
    Cookie ck2 = new Cookie("session_user", session_user);
    driver.manage().addCookie(ck1);
    driver.manage().addCookie(ck2);
    driver.get("http://www.testerbang.com:8001/testerbang_blog/");

    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
    Reporter.log("登录pass!");
  }
  
  @Test
  public void article() throws InterruptedException {
    Mys mys =  new Mys(driver);
    mys.openReleaseLink();
    System.out.println("点击发布博文按钮");
  }

  @BeforeTest
  public void beforeTest() {

    System.setProperty("webdriver.chrome.driver", currentPath + "/tools/chromedriver.exe");
    this.driver = new ChromeDriver();
    this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    this.driver.get("http://www.testerbang.com:8001/testerbang_blog/front/login.html");
    this.driver.manage().window().maximize();

  }

  @AfterTest
  public void afterTest() {
    this.driver.close();
  }

}

原文发布于微信公众号 - 测试邦(testerbang)

原文发表时间:2019-08-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券