【佳乐Selenium】DAY-8 分层
加班什么的最无聊了,尤其是形式主义的加班~~
反正闲着 就补补小日记吧
其实这个工作用了2天,而且是整整的两天
在做了2个模块 就感觉到必须要分层啦
小何老师给我讲了一下 要分
Test层:存放测试脚本
Page层:存放测试页面
Tools层:存放其他辅助测试的 (暂不考虑)
Logic层:逻辑脚本
这个过程很痛苦,有多苦只有自己能知道
业务场景:登录-申请任务-查询任务-选择任务-审核任务-退出
改善前:
一、页面和逻辑杂在一起
二、写了1个大方法 testng跑出来的结果只有一个,并不是按着上面的几个环节,逐个环节判断测试结果
三、每个class都传入driver参数,其实driver只用一次
改善后:
一、先把WebElement 声明出来 下面在调用,如果页面变动 只需维护上面的部分 不用从逻辑代码里找需要修改哪里
二、重构脚本 复用了链接里面的父类Page和父类TestCase
TestCase 根据需要进行调整
public static void setDriver(){
/* 设定 chrome webdirver 的位置 */
System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");
/* 启动 chrome 浏览器 */
driver = new ChromeDriver();
/* 浏览器最大化 */
driver.manage().window().maximize();
}
还要理解一下testNG的执行顺序
在TestNG里面 使用 dependsOnMethods
三、终于明白static 的意思了 之前背书的时候死记着 用static关键字声明的,那么属于类的属性和方法永远只在内存中存在一份,
实际用了才知道因为没加static导致driver的空指针问题,这辈子都记住了
http://www.myext.cn/other/a_20273.html
贴一小段的代码
====================为每一个页面做一个Page====================
/**
*首页
*/
public class HomePage extends Page {
/**
*URL常量,很少用到,一般在起始页用,有时放到配置文件里去统一管理
*/
private static final String URL="http://*";
public HomePage init(){
DriverManager.getDriver().get(URL);
return this;
}
//用户名
@FindBy(name="j_username")
private WebElement yonghuming;
//密码
@FindBy(name="j_password")
private WebElement mima;
//登录按钮
@FindBy(xpath="//*[@id='form1']/div/button")
private WebElement denglu;
public void login (String username,String password)
{
//用户名
yonghuming.sendKeys(username);
//密码
mima.sendKeys(password);
//登录按钮
denglu.click();
}
//注销按钮
@FindBy(className="logout")
private WebElement logout;
public void logout(){
//注销
logout.click();
DriverManager.quitDriver();
}
}
====================testNG====================
public class testApplyTask extends TestCase{
@Test
public void login() {
HomePage home = new HomePage();
home.init();
home.login("用户名","密码");
}
@Test(dependsOnMethods = { "login" })
public void applyTask() {
ApplyTaskPage action=new ApplyTaskPage();
action.ApplyTask(“任务名称”);
}
}
====================testNG XML====================
<test name="testApplyTask" preserve-order="true">
<classes>
<class name="com.testNG.testApplyTask"/>
<methods>
<include name="login" />
<include name="applyTask" />
<include name="logout" />
</methods>
</classes>
</test>
请问 Logic层:逻辑脚本 这里的逻辑脚本指的是什么? 或者说逻辑脚本与Test层的测试脚本有什么不同
整体的学习思路目前看起来是对的,不过关于分层的描述还是太粗略,建议跟我一样的初学者们参考这篇资料:
Page Factory Based Selenium Automation Framework
https://www.codeproject.com/Articles/1006514/Page-Factory-Based-Selenium-Automation-Framework
页:
[1]