PO模式(Page Object Model)

PO模式(Page Object Model)使用BDD框架后,在Framework层再使用线性脚本的方式明显是不适用的。

大家好,又见面了,我是你们的朋友全栈君。

使用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进行相关操作。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135541.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。

    lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。运行mybatis时报错:lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.a…

    2022年6月13日
    37
  • abstract修改方法

    abstract修改方法

    2021年12月31日
    57
  • 关于Virt-P2V那点事

    关于Virt-P2V那点事在实现企业服务器虚拟化的时候,许多系统已经是NT或Windows 2000的老系统,要安装上虚拟机还得重装系统,但是已经找不到光盘或是驱动程序了,因此重装系统是无法成功的,要将旧服务器虚拟化,最好的办法就是实体机转换(P2V)。一、什么是P2V?P2V是Physical to virtual的简称,即物理到虚拟。它是指将物理机上的系统、应用软件以及数据转换到虚拟机中。它的工作原理是将物

    2022年7月26日
    7
  • 野生前端的数据结构基础练习(5)——散列

    野生前端的数据结构基础练习(5)——散列野生前端的数据结构基础练习(5)——散列

    2022年4月20日
    35
  • export_symbol的使用

    export_symbol的使用       问题是这样的,前几天师妹需要在内核模块中使用tasklist_lock来操作保护内核进程链表,由于tasklist_lock如果要在模块中使用就必须把它填充到内核符号表里面,就要使用export_symbol,她在sched.h里面就是tasklist_lock声明的地方,添加export_symbol(tasklist_lock),在编译的时候总是出现undefinedsymb

    2022年7月16日
    22
  • ELF文件格式简介「建议收藏」

    ELF文件格式简介「建议收藏」  简单了解下ELF文件的格式。1简介  可执行与可链接格式(ExecutableandLinkableFormat,ELF),常被称为ELF格式,是一种用于可执行文件、目标代码、共享库和核心转储(coredump)的标准文件格式,一般用于类Unix系统,比如Linux,Macox等。ELF格式灵活性高、可扩展,并且跨平台。比如它支持不同的字节序和地址范围,所以它不会不兼容某一特别的CPU或指令架构。这也使得ELF格式能够被运行于众多不同平台的各种操作系统所广泛采纳。  E.

    2025年7月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号