自动化中的PageObject思想
谈着这个话题很大,因为我自己在自动化分层的方面做的就不是很好,最近在做java+selenium中,如果不分层去管理,代码就显得很乱,如下:
下面代码主要是做了一个登录,登录后在修改自己的一些个人信息,第一次就把最通用的查找控件的方法,写在一个方法里面,所以能看到这样的方式“getmethod.getXpath“取控件。而且登陆这个方法在另外一个方法中也要使用。这里很重复
这个代码第一眼就给人感觉很乱,而且所有内容和执行的操作,都放在一个页面中,太乱了。那我如何整理这样的代码
public class Register {
static WebDriver driver=null;
SeekMethod getmethod=new SeekMethod();
public String filePath = "E:\\senlenium\\Date.txt";
//Basetest testdriver=new Basetest();
@Before
public void StartDriver() { System.out.println("srart selenium");
driver=new ChromeDriver();
driver.get("http://www.91testing.net");
} public void Login(String name,String password) throws InterruptedException{
driver.findElement(By.linkText("登录")).click();
System.out.printf("url of current page is %s\n", driver.getCurrentUrl());
getmethod.getId("login_username",driver).clear();
((JavascriptExecutor)driver).executeScript("document.getElementById('login_username').value='"+name+"';");
driver.findElement(By.name("_password")).clear();
((JavascriptExecutor)driver).executeScript("document.getElementById('login_password').value='"+password+"';");
Thread.sleep(300);
driver.findElement(By.cssSelector("button[type='submit']")).click();
} @Test
public void TestLogin(){
try {
Login("xiaozhang","xiaozhang");
String loginassert=getmethod.getXpath(("//li[@class='visible-lg']"),driver).getText();
System.out.print(loginassert);
Assert.assertEquals("我的学习",loginassert);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
解决方法:我把他分为3个类,拿登陆举例
第一个类:定义页面上所有的元素,我取名为LoginElment
package com.Method;
public class LoginElment {
/*
* 只是定义界面的元素
*/
public static String name="login_username";
public static String passWord="_password";
public static String LoginBtn="button[type='submit']";
}
第二个类:定义所有控件的操作。如查找到控件,对他进行单击,双击,填入,因为我的登录在很多地方要使用,所以我使用了单例模式
package com.Method; import org.openqa.selenium.WebDriver; public class LoginBusiness {
/*
* 主要实现控件的方法
* 如查找到控件
*/
/*
* 单例模式
*/
private static LoginBusiness loginbusiness=null;
public static LoginBusiness getInstance(){
if(loginbusiness==null){
loginbusiness=new LoginBusiness();
}
return loginbusiness;
}
public void LoinTab(){
SeekMethod.getLink("登录", BaseTest.driver).click();
}
public void inputUserName(String name){ SeekMethod.getId((LoginElment.name),BaseTest.driver).sendKeys(name);
}
public void inputPassword(String word){ SeekMethod.getName((LoginElment.passWord), BaseTest.driver).sendKeys(word);
}
public void clickButton(WebDriver driver){
SeekMethod.getcssSelector(LoginElment.LoginBtn, BaseTest.driver).click();
}
//做断言使用
public String getmethod(){
String loginassert=SeekMethod.getXpath(("//li[@class='visible-lg']"),BaseTest.driver).getText(); return loginassert;
} public void login(String userName,String pw){
SeekMethod.getLink("登录", BaseTest.driver).click();
//driver.findElement(By.linkText("登录")).click();
inputUserName(userName);
inputPassword(pw);
clickButton(BaseTest.driver); }
}
第三个类:实现登录的方法。界面上的自动化就如同手工操作一样,每次执行就是一个操作,如下
public class Login extends BaseTest {
WebDriver Driver;
LoginBusiness loginbusiness;
@BeforeClass
public void setUp(){
loginbusiness=loginbusiness.getInstance();
}
//我这里使用了testng的参数化,下面是两个参数
@Test
@Parameters({"logname","password"})
public void testLogin(String logname,String password){
//第一步:打开登录界面
loginbusiness.LoinTab();
//第二步:输入用户名
loginbusiness.inputUserName(logname);
//第三步:输入密码
loginbusiness.inputPassword(password);
//第四步:点击登录
loginbusiness.clickButton(Driver);
//断言
Assert.assertEquals("我的学习",loginbusiness.getmethod());
}
}
是不是看着很像功能测试一样,一步一步的执行,就这样我的login页面的脚本就算完成了,看了后,其他人员也能够一目了然,心情顿时就美丽了
自动化中的PageObject思想的更多相关文章
- 说说UI自动化中的PO模式
PO模式,全称PageObject模式,即页面对象模式.将页面定位与业务操作分离. po模式有以下几个优点: 1.易读性好 2.扩展性高 3.复用性强 4.维护性好 5.代码冗余率低 了解了po模式及 ...
- 工作流引擎在vivo营销自动化中的应用实践 | 引擎篇03
作者:vivo 互联网服务器团队- Cheng Wangrong 本文是<vivo营销自动化技术解密>的第4篇文章,分析了在营销自动化业务引入工作流技术的背景和工作流引擎的介绍,同时介绍了 ...
- Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析
加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景 在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...
- Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)
Selenium 获取 JavaScript 返回值非常简单,只需要在 js 脚本中将需要返回的数据 return 就可以,然后通过方法返回 js 的执行结果,方法源码如下所示: /** * Get ...
- Selenium2学习-032-WebUI自动化实战实例-030-JavaScript 在 Selenium 自动化中的应用实例之五(高亮标示元素)
在自动化脚本编写过程中,操作元素之前,需要对元素进行高亮显示(通过修改元素的边框样式),同时进行截图,以记录操作的元素对象.在实际应用中较为少见,通常用于演示,或者发生错误时的屏幕截图捕捉,用于错误报 ...
- Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)
通过 JS 或 JQuery 获取到元素后,通过 offsetLeft.offsetTop.offsetWidth.offsetHeight 即可获得元素的位置和大小,非常的简单,直接上源码了,敬请参 ...
- Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)
日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...
- Selenium2学习-022-WebUI自动化实战实例-020-JavaScript 在 Selenium 自动化中的应用实例之二(获取浏览器显示区域大小)
前几篇文章中简略概述了,如何获取.设置浏览器窗口大小,那么我们该如何获取浏览器显示区域的大小呢?此文讲对此进行简略概述,敬请各位小主参阅.若有不足之处,敬请各位大神指正,不胜感激! 获取浏览器显示区域 ...
- Selenium2学习-011-WebUI自动化实战实例-009-JavaScript 在 Selenium 自动化中的应用实例之一(赋值)
通常在编写 Selenium 的 WebUI 自动化脚本时,有些元素不易定位元素,或有些元素为隐藏的(此时用 WebElement.getText() 获取其值的时候,返回的结果为空),对日常的 UI ...
随机推荐
- Spring dependency checking with @Required Annotation
Spring's dependency checking in bean configuration file is used to make sure all properties of a cer ...
- CentOS_6.5 64位系统,安装git服务器+客户端
================ git服务器安装 ==================== CentOS安装Git服务器 Centos 6.4 + Git 1.8.2.2 + gitosis## . ...
- php把时间格式化
如题,把如 2013-6-12 12:00 格式化为 2013-6--12 可以先将时间转换下,然后重新将时间格式化显示: echo date("Y-m-d", strtotime ...
- SOURCES的文件格式
SOURCES的文件格式: TARGETNAME=drivername , -本参数用于指定生成的设备驱动程序名称(不需后缀名),所产生的文件 -为drivername.sys. TARGETPATH ...
- 微信小程序正式上线 可置于聊天窗口顶部
历经一年的等待后,小程序在2017年1月9日凌晨终于揭开神秘面纱,正式上线. 微信小程序推广海报 随着小程序正式上线,用户现在可以通过二维码.搜索等方式体验到开发者们开发的小程序了. 用户只要将微信更 ...
- 命令行刷机教程( 以Linux系统为例 )
//第一步adb device // 如果不能cd AndroidSDK/platform-toolsadb kill-server adb start-server //第二步adb reboot ...
- java获取照片相关属性
package test; import java.io.File; import java.util.Iterator; import com.drew.imaging.jpeg.JpegMetad ...
- 项目经验之:GIS的初步工作窗体的搭建
不多说了,上图,初步工作刚好完 GIS平台系统,实现整个供水系统的协调与统一.系统以管网为基础依据,建立可实现供水管网规划设计.输配管理.图档管理.抢修辅助决策及综合查询.统计等功能. 整体窗口设计 ...
- 图像切割之(五)活动轮廓模型之Snake模型简单介绍
图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...
- pjsip视频通信开发(上层应用)之数字键盘的制作
在pjsip视频通信开发(上层应用)之EditText重写中我制作了一个显示输入内容的EditText,这里将制作一个数字键盘,其实跟计算器一样,最多的就是用TableLayout来实现,内部通过权重 ...