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

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

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

在写此代码时候,遇到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. c#中多线程访问winform控件的若干问题

    我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来解决这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...

  2. WPF MVVM 中怎样在ViewModel总打开的对话框在窗体之前

    今天在WPF的项目中,写打印插件,在ViewModel中对需要弹出打印对话框,而对话框如果没有Owner所属的时候经常会被当前应用程序遮住,导致我都不知道到底弹出来没有! 参照:http://www. ...

  3. 细说PHP中strlen和mb_strlen的区别

    在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别.下面通过例子,讲解这两者之间的区别. $str='中文a字1符'; ec ...

  4. SLua

    安装 1.下载最新版,将Assets目录里的所有内容复制到工程中,对于最终产品,可以删除例子,文档等内容,如果是开发阶段则无所谓. 2.等待unity编译完毕,如果一切顺利的话,将出现SLua菜单,点 ...

  5. CODEVS 1073 家族

    题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和 ...

  6. appfabric 简单应用

    http://msdn.microsoft.com/en-us/library/ee790941(v=azure.10).aspx Preparing the Visual Studio Projec ...

  7. 线上问题:如何定位解决CPU高占有率

    (原文转自:http://www.blogjava.net/hankchen) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题. 根据top命令,发现PID为28555的Java进程占用 ...

  8. Adaboost原理及目标检测中的应用

    Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...

  9. 安卓接入ShareSDK问题

    平台图标错乱原因  导出的jar包 包括了 style.class R$attr.class MainActivity.class R$color.class R$drawable.class R$s ...

  10. HDU 2844 Coins(多重背包)

    点我看题目 题意 :Whuacmers有n种硬币,分别是面值为A1,A2,.....,An,每一种面值的硬币的数量分别是C1,C2,......,Cn,Whuacmers想买钱包,但是想给人家刚好的钱 ...