selenium的PageObject设计模式
PageObject设计模式
1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架。
2. web测试时,建议强烈推荐使用_谷歌或_火狐浏览器。
3. PageObject设计模式:是将某个页面的所有"元素(包含控件)属性"及"元素操作"封装在1个类(Class)里面,以page为单位进行管理。
4. 目的: 测试代码与被测页面对象代码分离,后期如果有页面元素发生了更改,只需要修改相应页面对象的代码(即对应Class文件),而不需要修改测试代。
5. 尽量采用xpath方式来寻找页面元素,而不建议使用name,Link等方法; xpath是基于页面元素所处区域,一般不会发生变化,测试代码基本不受干扰。
6. 将页面元素属性信息与代码分离,即与被测对象代码分离,目的也是为了进一步降低后续因页面变化带来的维护成本。
一、公共类,操作浏览器相关的
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; public class TestBase {
protected WebDriver driver; @BeforeTest
public void setUp() throws Exception {
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(, TimeUnit.SECONDS);
} @AfterTest
public void tearDown() throws Exception { driver.quit();
} }
二、登录页面存放的元素
import org.openqa.selenium.By;
import org.openqa.selenium.NotFoundException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement; public class LoginPage {
private WebDriver driver; public LoginPage(WebDriver driver) {
this.driver = driver;
} /**
* 用户名
*
* @param driver
* @param userText
*/
public void setPhone(String phoneText) throws NotFoundException {
// driver.findElement(By.id("username")).clear();
// driver.findElement(By.id("username")).sendKeys(userText);
this.setText(driver.findElement(By.id("username")), phoneText);
} /**
* 密码
*
* @param driver
* @param userText
*/
public void setPass(String passText) throws NotFoundException {
// driver.findElement(By.id("username")).clear();
// driver.findElement(By.id("username")).sendKeys(userText);
this.setText(driver.findElement(By.id("password")), passText);
} /**
* 点击登录按钮
*
* @param driver
*/
public void clickButton() throws NotFoundException {
driver.findElement(By.id("butt")).click();
} private void setText(WebElement e,String text)
{
e.clear();
e.sendKeys(text);
} }
三、登录页面提供的方法
import org.openqa.selenium.WebDriver;
import com.page.LoginPage; public class LoginBuss {
private WebDriver driver; public LoginBuss(WebDriver driver) {
this.driver = driver;
}
/**
* 定义登陆业务
*
* @param driver
* @param usename
* @param password
* @return
* @throws InterruptedException
*/
public void login(String username, String password)
throws Exception {
driver.get("xxxxxxxxx");//打开测试网址 LoginPage login_page = new LoginPage(driver); login_page.setPhone(username);//输入用户名
login_page.setPass(password);// 输入密码
login_page.clickButton();//点击登录按钮
} }
四、测试用例
import java.lang.reflect.Method;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.bussiness.LoginBuss;
public class loginCase extends TestBase{ // 用户成功登陆
@Test
public void LoginSucc() throws Exception {
LoginBuss lb = new LoginBuss(driver);
lb.login("xxx", "123abc");// 调用登录的一个事务
Thread.sleep();
} }
selenium的PageObject设计模式的更多相关文章
- PageObject设计模式,在selenium自动化测试中的运用
PageObject设计模式1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 2. web测试时,建议 ...
- PageObject设计模式 在selenium 自动化测试里面的应用
PageObject设计模式1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 2. web测试时,建议 ...
- 聊聊UI自动化的PageObject设计模式
当我们开发UI自动化测试用例时,需要引用页面中的元素(数据)才能够进行点击(动作)并显示出页面内容.如果我们开发的用例是直接对HTML元素进行操作,则这样的用例无法"应对"页面中U ...
- Page-Object设计模式
自动化脚本初写之际一定是只求完成功能测试,页面by.id.by.name.by.xpath满篇飞.业务逻辑代码重复率也是越来越高.慢慢的写着写着开始重构,开始封装一些方法.代码量好一些的人会在代码开始 ...
- Selenium+java - PageFactory设计模式
前言 上一小节我们已经学习了Page Object设计模式,优势很明显,能更好的体现java的面向对象思想和封装特性.但同时也存在一些不足之处,那就是随着这种模式使用,随着元素定位获取,元素定位与页面 ...
- selenium Object Page 设计模式理解及实现!
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...
- 基于Python Selenium Unittest PO设计模式详解
本文章会讲述以下几个内容: 1.什么是PO设计模式(Page Object Model) 2.为什么要使用PO设计模式 3.使用PO设计模式要点 4.PO设计模式实例 1.什么是PO设计模式 (Pag ...
- web端自动化——selenium Page Object设计模式
Page Object设计模式的优点如下: ① 减少代码的重复. ② 提高测试用例的可读性. ③ 提高测试用例的可维护性,特别是针对UI频繁变化的项目. 当为Web页面编写测试时,需 ...
- 我所理解的selenium之PO设计模式
下午,花了点时间来整理UI自动化设计,就把我所理解的PO设计模式项目结构脑图整理如下,有不对的地方还望多多包涵.谢谢
随机推荐
- struts2之文件上传
一.单文件上传 实例: 表单应该注意三个点 form中的method="post".enctype="multipart/form-data".input中 ...
- 转:Android ListView 异步加载图片
http://www.iteye.com/topic/1118828 http://www.iteye.com/topic/1127914 这样做无疑是非常可取的方法,但是加载图片时仍然会感觉到轻微的 ...
- Hibernate 中 get()和load()的区别
一.1.程序检索数据库中不存在的OID: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回nu ...
- .net 网站首页,本次的项目中用到的一个网站首页中统计网页访问量的工具方法,我觉得它应该在pagebase里面,拿来用一下
需要建立一个根文件夹 ~/xml/couter.txt #region 网站访问量 protected void pageviews() { int count ...
- Activity介绍
1.Activity使用方法(跳转): (1)写Activity类继承Activity package com.example.test2; import android.app.Activity; ...
- python3使用urllib获取set-cookies
#!/usr/bin/env python # encoding: utf-8 import urllib.request from collections import defaultdict re ...
- POCO库中文编程参考指南(2)基本数据类型(Poco/Types.h)
POCO库中文编程参考指南(2)基本数据类型 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> ...
- Kubernetes-glusterfs配置
#############################################pvc与pv的区别#pv可以看做一块硬盘,pv可以有很多块不同大小的硬盘,比如有10G,50G,100G的3个 ...
- 记录常见的HTTP请求错误
服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF 解决方案:winfrom 在app.config种添加 web 在 web.config种添 ...
- HDU5469 Antonidas(树分治&&哈希)
给你一颗点上有字符的树,问一个给定的字符串是否是这棵树上的两点的路径. 树分治的思想就是每次找重心,重心下的子问题分解去做,然后就是合并了.合并的时候用一个总的set<pair<len,h ...