使用页面对象模型(pageFactory)
页面对象模型可以使测试脚本有更高癿可维护性,减少了重复癿代码,把页面抽象出来。
页面对象设计模式提供了测试一个接口,测试可以像用户行为一样来操作页面。
通过隐藏页面元素定位,返有劣将测试代码和页面分离。使代码看起来好看整洁
在写此代码时候,遇到driver 为null,调试后原来没有driver传到
driver.Navigate().GoToUrl(Url)
此系统的验证码是用代理服务器获取的,因为没有代码经验,debug的时候,验证码返回的值是null,经询问开发人员,原来我没有配置文件
此代理服务器为局域网Ip。。
<add key="serviceurl_get_code" value="http://192.168.1.84:9001/imgservice/getcode"/>
直接上代码(login页面为例)
public class DtMoverLoginPage
{ //使用FindsBy注释语言来定位元素,不能直接使用name 或id 来定位元素并作用变量
private static string Url = "URL";
private static string Title = "User Login | enterprise network drive";
private static string LoginTitle = "Enterprise network drive | File";
private static string ErrorTip = "Please enter theVerification code";
private IWebDriver driver = new FirefoxDriver(); public static string GetServerCode()
{
return CodeServiceClient.CodeService.GetCode();
} [FindsBy(How = How.Id, Using = "UserName")] [CacheLookup] private IWebElement UserNameField; [FindsBy(How = How.Id, Using = "Password")] private IWebElement PasswordField; [FindsBy(How = How.Id, Using = "ValidateCode")] private IWebElement VerificationField; [FindsBy(How = How.Id, Using = "login_button_credentials")] private IWebElement LoginButon; [FindsBy(How = How.Id, Using = "errorArea")] private IWebElement ErrorAreaTip; public DMoverLoginPage()
{ PageFactory.InitElements(driver, this);
driver.Manage().Window.Maximize(); } public void Load()
{ driver.Navigate().GoToUrl(Url);
} public void Close()
{ driver.Close();
} public bool IsLoaded
{
get
{
return driver.Title.Equals(Title); }
} public bool IsLogined
{
get
{
return driver.Title.Equals(LoginTitle);
} } public bool IsError
{
get
{
return driver.Equals(ErrorTip); }
} public void DMoverBmi(string userName, string Password, string verCode)
{ UserNameField.SendKeys(userName);
PasswordField.SendKeys(Password);
VerificationField.SendKeys(verCode);
LoginButon.Submit(); if (IsLogined == true)
{ Console.WriteLine("Login is successful!");
}
else
{
Console.WriteLine("Login is Fail!");
}
driver.Quit(); } public string userName
{
get { return UserNameField.GetAttribute("value"); }
} public string Password
{
get { return PasswordField.GetAttribute("value"); }
} public string VerCode
{ get { return VerificationField.GetAttribute("value"); }
} public class DmLogintests
{
[Test] //登录
public void DMLoginTest()
{
DMoverLoginPage dMoverPage = new DMoverLoginPage();
dMoverPage.Load(); dMoverPage.DMoverBmi("angkor", "", GetServerCode()); } } }
下一学习:研究如何使测试代码跑起来的原理
使用页面对象模型(pageFactory)的更多相关文章
- Selenium2(java)页面对象模型(Page Object) 八
在开发一个 Selenium WebDriver 测试,我们可以使用页面对象模型.这个模型可以使测 试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.对象模型也提供了一个注释,帮助缓存远程,避 ...
- selenium2 页面对象模型Page Object
开发Selenium WebDriver测试时,可以使用页面对象模型,这样可使得测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.同时页面对象模型也提供了一个注释,帮助缓存远程,避免出现元素 ...
- selenium 的页面对象模型Page Object
页面对象模型page object model是selenium中的一种脚本设计模式,它能将页面元素封装起来,与业务操作分隔开, 在页面变化改变时,无需去修改业务逻辑代码,提高脚本维护的效率. 1.p ...
- Selenium3+python自动化014-自动化常用设计模式页面对象模型 (Page Object)
一.概 念: PO(Page Object)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 二.优点可以使代码复用,降低维 ...
- 页面对象(Page Object)模式
内容转载自 https://www.cnblogs.com/yytesting/p/6973474.html 页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可 ...
- 5.8 页面对象(Page Object)模式
页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率,是中级自动化测试工程师的必备技能之一. 1.页面 ...
- selenium从入门到应用 - 5,页面对象设计模式下的页面模块
本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...
- C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序
好久没写博客了,废话不多说,直接说问题. 问题发生情况,首先这个是老项目,然后我是第一次修改.当我解决了各种引用,数据库配置之后等类似的问题,我启动的项目的时候,无任何问题,但是当我点击页面的按钮的时 ...
- 关于asp.net中页面事件加载的先后顺序
一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...
随机推荐
- android hander 线程用法
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanc ...
- (转载)delphi 中如何调用sql 存储过程
delphi 中如何调用sql 存储过程 使用TADOStoredProc组件,可以,给你举个例子好了 with ADOStoredProc1 do begin Close; Parameters.C ...
- MVC+EF 随笔小计——NuGet程序包管理
安装EF 打开 工具-库程序包管理器-程序包管理器控制台 输入 install-package entityframework 去MSDN上查看下EF的架构图:http://msdn.microsof ...
- Web API 返回json文件的2中不用方式
//方法一:直接返回序列化后的json文件 public static HttpResponseMessage ConvertToJson(this Object obj) { String str= ...
- 【BZOJ】1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar 题意:一个点数为N(1<= 40w),边数为M(1<=20w)的图,总共删除k个节点,问开始以及每次删除一个节点之后图的连通块数? ...
- [转载]C#读取Excel几种方法的体会
C#读取Excel几种方法的体会 转载地址:http://developer.51cto.com/art/201302/380622.htm (1) OleDb: 用这种方法读取Excel速度还是非常 ...
- 正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
困扰了两天的问题,非常头疼,今天终于有了解决思路了,说到底,还是对maven不够了解吧.总是抱怨maven不好用,出现各种无厘头的问题,原来这些都是归于对它不够了解不够熟悉,它提供了很好的解决思路,只 ...
- delphi xe5 android 使用样式(风格)
1.在界面上添加 TStyleBook 控件 2.点击Resource 选择xe5程序安装带的几个风格的其中之一,路径存放在: C:\Program Files\Embarcadero\RAD Stu ...
- CSS跨浏览器(转)
本文将介绍兼容IE+.FF.Chrome.Safari.Opera的技巧 一.CSS HACK 专门为某版本的浏览器设置样式,从而解决浏览器显示的差异 selector { +property:val ...
- [转载]MongoDB学习(二):数据类型和基本概念
数据类型 基本数据类型 MongoDB的文件存储格式为BSON,同JSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型.与数据库打交道的那些应用.例如,JSON没有 ...