前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >selenium-webdriver|12 page-object模式介绍

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

作者头像
测试邦
发布2019-08-29 16:32:21
9970
发布2019-08-29 16:32:21
举报
文章被收录于专栏:测试邦测试邦

Page-object思想介绍

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

为什么要使用page-object?

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

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

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

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

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

对页面元素的初始化

PageFactory.initElements(driver,this);

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

直接看代码

1、page基类

代码语言:javascript
复制
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类

代码语言:javascript
复制
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类

代码语言:javascript
复制
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();
  }

}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试邦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档