页面对象模型可以使测试脚本有更高癿可维护性,减少了重复癿代码,把页面抽象出来。

页面对象设计模式提供了测试一个接口,测试可以像用户行为一样来操作页面。

通过隐藏页面元素定位,返有劣将测试代码和页面分离。使代码看起来好看整洁

在写此代码时候,遇到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)的更多相关文章

  1. Selenium2(java)页面对象模型(Page Object) 八

    在开发一个 Selenium WebDriver 测试,我们可以使用页面对象模型.这个模型可以使测 试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.对象模型也提供了一个注释,帮助缓存远程,避 ...

  2. selenium2 页面对象模型Page Object

    开发Selenium WebDriver测试时,可以使用页面对象模型,这样可使得测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.同时页面对象模型也提供了一个注释,帮助缓存远程,避免出现元素 ...

  3. selenium 的页面对象模型Page Object

    页面对象模型page object model是selenium中的一种脚本设计模式,它能将页面元素封装起来,与业务操作分隔开, 在页面变化改变时,无需去修改业务逻辑代码,提高脚本维护的效率. 1.p ...

  4. Selenium3+python自动化014-自动化常用设计模式页面对象模型 (Page Object)

    一.概 念: PO(Page Object)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 二.优点可以使代码复用,降低维 ...

  5. 页面对象(Page Object)模式

    内容转载自 https://www.cnblogs.com/yytesting/p/6973474.html 页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可 ...

  6. 5.8 页面对象(Page Object)模式

    页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率,是中级自动化测试工程师的必备技能之一. 1.页面 ...

  7. selenium从入门到应用 - 5,页面对象设计模式下的页面模块

    本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...

  8. C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序

    好久没写博客了,废话不多说,直接说问题. 问题发生情况,首先这个是老项目,然后我是第一次修改.当我解决了各种引用,数据库配置之后等类似的问题,我启动的项目的时候,无任何问题,但是当我点击页面的按钮的时 ...

  9. 关于asp.net中页面事件加载的先后顺序

    一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...

随机推荐

  1. android hander 线程用法

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanc ...

  2. (转载)delphi 中如何调用sql 存储过程

    delphi 中如何调用sql 存储过程 使用TADOStoredProc组件,可以,给你举个例子好了 with ADOStoredProc1 do begin Close; Parameters.C ...

  3. MVC+EF 随笔小计——NuGet程序包管理

    安装EF 打开 工具-库程序包管理器-程序包管理器控制台 输入 install-package entityframework 去MSDN上查看下EF的架构图:http://msdn.microsof ...

  4. Web API 返回json文件的2中不用方式

    //方法一:直接返回序列化后的json文件 public static HttpResponseMessage ConvertToJson(this Object obj) { String str= ...

  5. 【BZOJ】1015: [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar 题意:一个点数为N(1<= 40w),边数为M(1<=20w)的图,总共删除k个节点,问开始以及每次删除一个节点之后图的连通块数? ...

  6. [转载]C#读取Excel几种方法的体会

    C#读取Excel几种方法的体会 转载地址:http://developer.51cto.com/art/201302/380622.htm (1) OleDb: 用这种方法读取Excel速度还是非常 ...

  7. 正确配置jstl的maven依赖,jar包冲突的问题终于解决啦

    困扰了两天的问题,非常头疼,今天终于有了解决思路了,说到底,还是对maven不够了解吧.总是抱怨maven不好用,出现各种无厘头的问题,原来这些都是归于对它不够了解不够熟悉,它提供了很好的解决思路,只 ...

  8. delphi xe5 android 使用样式(风格)

    1.在界面上添加 TStyleBook 控件 2.点击Resource 选择xe5程序安装带的几个风格的其中之一,路径存放在: C:\Program Files\Embarcadero\RAD Stu ...

  9. CSS跨浏览器(转)

    本文将介绍兼容IE+.FF.Chrome.Safari.Opera的技巧 一.CSS HACK 专门为某版本的浏览器设置样式,从而解决浏览器显示的差异 selector { +property:val ...

  10. [转载]MongoDB学习(二):数据类型和基本概念

    数据类型 基本数据类型 MongoDB的文件存储格式为BSON,同JSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型.与数据库打交道的那些应用.例如,JSON没有 ...