使用BDD框架后,如何在Framework层架构出健壮、稳定、高扩展的架构是项目成功的关键。这个时候再使用线性脚本执行的方式明显是不适用的。目前比较普遍的做法是使用PO模式(Page Object Model)。
下面就简单介绍一下PO模式:
Page Object Model的核心是分离测试对象和测试数据。
首先我们看一段代码
PageObject:Object类,作用初始化webdriver并对要用的webdriver的接口进行二次封装。
public class WebDriverObject
{
private static IWebDriver _CurrentDriver;
//初始化webdriver,静态变量保证唯一性
public static IWebDriver CurrentDriver
{
get
{
if (_CurrentDriver == null || _CurrentDriver.WindowHandles.Count == 0)
{
InternetExplorerOptions opt = new InternetExplorerOptions();
opt.IgnoreZoomLevel = true;
opt.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
opt.EnablePersistentHover = false;
_CurrentDriver = new InternetExplorerDriver(opt);
}
if (_OpenedWindowHandles == null)
{
_OpenedWindowHandles = new List<string>();
}
else
{
_OpenedWindowHandles.Clear();
}
OpenedWindowHandles.Add(_CurrentDriver.CurrentWindowHandle);
return _CurrentDriver;
}
}
//封装运行JS的方法
public static object ExecuteJavaScript(string script)
{
return null;
}
//封装运行JQuery的方法
public static object ExecuteJavaScript(string script, params object[] args)
{
return null;
}
//封装click,sentText等,不同Page公用的方法
}
Page类中,根据Oject类中的提供的二次封装的接口,实现当前页面要实现的方法,如Login方法。
public class CPPage
{
const string LogonPageTitle = ""; //portal Title
public bool Login(Dictionary<string,string>info = null)
{
WebDriverHelper.CurrentDriver.Navigate().GoToUrl("192.168.0.1/portal");
//调用Object类中相应的方法实现对应需求
...
}
}
PO模式就是Page + Object。不同种类Page采用调用Object类的中二次封装的webbriver的方法根据各自Page不同的需求封装自己的方法。再通过Page类实例对对应Page进行相关操作。