1.目的:为了将元素的find方法和业务逻辑分开来。如果元素的页面位置发生了变化,只需改动一个文件,而不影响业务的实现。

2.原理:一般一个页面对应一个class,在class里描述所有要用到的webelement。通过PageFactory.initWebElement(Webdriver d,this)的方法来实例化页面对象。

每次在用到一个元素的时候,会在当前页面搜索,如果第二次再用到这个元素,则会再次寻找。如果一个元素在页面的任何地方都不会变,则可以再@FindBy方法的下方写上@CacheLookup,则会被缓存起来,这样可以提高搜索效率

3.例子:登录163邮箱,在163的写信页面,先点击写信按钮,然后在收件人里填写对应信息

//【1】元素类---登录页面

public class Login163VO {
 @FindBy(id="idInput")
 public WebElement username ;
 
 @FindBy(id="pwdInput")
 public WebElement password ;
 
 @FindBy(id="loginBtn")
 public WebElement loginBtn ;
 
 public Login163VO(WebDriver driver){
  PageFactory.initElements(driver,this);
 }

}

//【2】元素类---写信页面

public class Send163VO {

//通过xpath方法,找到写信按钮
 @FindBy(xpath="//div[@id='dvNavTop']/ul/li[2]")

//把该按钮缓存起来
 @CacheLookup
 public WebElement xiexin ;

//通过xpath方法,找到收件人输入框。这个按钮是点击写信按钮后才显示的。但是使用PageObject方法不受影响,因为在使用到该元素时,才会去搜索,并且调用该元素,是在点击了写信按钮以后
 @FindBy(xpath="//div[@id='divComposeto']/div/div/div[2]/div/input")
 public WebElement shoujianren;
 //使用PageObject方法,实例化页面元素
 public Send163VO(WebDriver driver){
  PageFactory.initElements(driver, this);
 }
}

//【3】测试类--使用了testng
public class Test163 {
 WebDriver driver = null;
 Login163VO t = null;
 Send163VO s = null;
 
 @BeforeClass
 public void setUp(){
  driver= new FirefoxDriver();
  driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  driver.get("http://mail.163.com");
 }
 
    @Test
    public void testLogin163() throws InterruptedException { 
     t = new Login163VO(driver);
     t.username.sendKeys("name@163.com");
     t.password.sendKeys("pass");
     t.loginBtn.click();
    Thread.sleep(3000); 
  }
   
    @Test
    public void testXiexin163(){
     s = new Send163VO(driver);
     s.xiexin.click();
     s.shoujianren.sendKeys("name@126.com");
   }

@Test(enabled=false)//不会执行的类,暂时没有实现好的类
    public void tearDown(){
     driver.quit();
   }

}

【框架】PageObject(一)的更多相关文章

  1. python+selenium 自动化测试实战

    一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...

  2. UI自动化测试框架(项目实战)python、Selenium(日志、邮件、pageobject)

    其实百度UI自动化测试框架,会出来很多相关的信息,不过就没有找到纯项目的,无法拿来使用的:所以我最近就写了一个简单,不过可以拿来在真正项目中可以使用的测试框架. 项目的地址:https://githu ...

  3. 【Python + ATX】之uiautomator2 PageObject模式自动化框架学习

    参考文章: 感谢:cynic (linpengcheng) <ATX 基于 ATX-Server 的 UI 自动化测试框架> <ATX-uiautomator2 实现 webview ...

  4. Appium+python自动化(三十二)- 代码写死一时爽,框架重构火葬场 - PageObject+unittest(超详解)

    简介 江湖有言:”代码写死一时爽,框架重构火葬场“,更有人戏言:”代码动态一时爽,一直动态一直爽

  5. 关于selenium的CI、框架……

    这段时间除了项目测试外,主要在做web自动化的事情,大致总结一下吧,总体的设计模式pageobject+pagefactory+testng的数据驱动,项目用maven来构建,使用jenkins集成, ...

  6. 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理

    Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...

  7. web自动化框架之一介绍与环境搭建(Selenium+Eclipse+Python)

    看到一篇环境搭建文章,详细又全面,这里就不一一重复了 http://blog.csdn.net/dyllove98/article/details/9390649 其它: 1.框架介绍      整个 ...

  8. selenium基础框架的封装(Python版)

    一.常用函数的封装 在使用selenium做web自动化测试的过程中,经常会碰到各种各样的问题,比如: 1.页面加载比较慢时,selenium查找元素抛出异常,导致脚本运行中止 2.写完脚本后发现代码 ...

  9. PageObject设计模式,在selenium自动化测试中的运用

    PageObject设计模式1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 2. web测试时,建议 ...

随机推荐

  1. 如何在python中调用C语言代码

    1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypes,SWIG,Python/ ...

  2. StringBuilderWriter 这个类需要commons.io.2.6这个包才可以使用, 在maven仓库中搜

  3. 学习笔记32—python常见问题及解决办法

    1.Anaconda3 中 Spyder 无法打开/点击没有反应 应对方法 1).通过pip安装pyqt5:pip install pyqt5 2).输入以下命令:spyder --new-insta ...

  4. Django - 将URL映射到视图

    URLconf 就像是 Django 所支撑网站的目录.它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表.你就是以这种方式告诉 Django,对于这个 URL 调用这段代码, ...

  5. ICO分享

  6. Mongodb 分享(一)

    Mongodb使用基础知识: 一.简介 1.mongodb是什么? 1)MongoDB 是一个基于分布式文件存储的数据库.由 )mongodb 客户端:NoSQL Manager for MongoD ...

  7. android -------- 混淆打包报错(warning - InnerClass annotations are missing corresponding EnclosingMember annotations)

    最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations ...

  8. Confluence 6 设置你的个人空间主页

    不论你是否正在使用个人空间为沙盒来测试一些内容,组合灯显示是如何工作的,一个能够导航到其他空间和内容的页面,或者一些完全不同的东西.下面一些红能够帮助你在你的个人空间中更加有效的使用和发布信息. 使用 ...

  9. luffy之多条件登录与极验滑动验证码

    多条件登录 JWT扩展的登录视图,在收到用户名与密码时,也是调用Django的认证系统中提供的authenticate()来检查用户名与密码是否正确. 我们可以通过修改Django认证系统的认证后端( ...

  10. React文档(五)组件和props

    组件可以让你将UI分割成独立的,可复用的模块,然后考虑将每个模块彼此隔离.从概念上理解,组件就像js中的函数.他们接受随意的输入(被称为props)然后返回React元素来描述屏幕上应该出现什么. 函 ...