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

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

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

在写此代码时候,遇到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. 通过正则表达式获取url中参数

    url: http://xxxx.com?name=魅力&id=123 js中: var name = getUrlParam("name"); /*通过正则获取url中的 ...

  2. 为什么要有binary-to-text encoding?

    在wikipedia上看MIME的介绍的时候,有一节是关于Content-Transfer-Encoding的,里面提到了binary-to-text encoding,我就想,既然计算机中的信息使用 ...

  3. hdu 4358 Boring counting 离散化+dfs序+莫队算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 题意:以1为根节点含有N(N <= 1e5)个结点的树,每个节点有一个权值(weight ...

  4. IIS MIME类型问题(html5 video 本地打开可以,IIS打开不了)

    问题: mediaelement js(html 5 视频插件)网页用ie9本地打开可以,iis,vs2010在ie9上运行不了,chrome可以 (在博客园里有个人跟我遇到相同的问题:http:// ...

  5. C#操作mongodb数据库

    1.下载驱动: 如下图:选择c#解决方案,右键,点击 “管理NuGet程序包(N)...” 在弹出的对话框中,输入MongoDB.Driver,进行搜索,然后选择安装. 2.引用命名空间: using ...

  6. GC的代机制

    1.代为CLR垃圾回收器采用的一种机制,基于以下几点假设:对象越新,生存期越短:对象越老,生存期越长: 2.托管堆仅支持3代(GC.MaxGeneration,第0代.第1代.第2代),CLR初始化会 ...

  7. Asp.net MVC 视图之公用代码

    一.公共模板 转自:http://www.cnblogs.com/kissdodog/archive/2013/01/07/2848881.html 1.@RenderBody() 在网站公用部分通过 ...

  8. POJ2225+BFS

    简单的BFS   1a /* 从起点到终点 */ #include<stdio.h> #include<string.h> #include<stdlib.h> # ...

  9. AHB总线和APB总线

    AHB主要用于高性能模块(如CPU.DMA和DSP等)之间的连接,作为SoC的片上系统总线,它包括以下一些特性:单个时钟边沿操作:非三态的实现方式:支持突发传输:支持分段传输:支持多个主控制器:可配置 ...

  10. PieTTY

    PieTTY 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 應該滿多人用 pietty 連上程 ...