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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java之XML的使用「建议收藏」

    Java之XML的使用「建议收藏」一.xml的定义和优势:(1).定义:在描述一些有结构性的数据时应当使用XML来描述,例如:用户信息/省市结构等XML(eXtensibleMarkupLanguage),是一种可扩展的标记语言,类似HTML。XML技术是W3C组织(WorldWideWebConsortium万维网联盟)发布的,目前遵循的是W3C组织于1998年发布的XML1.0规范。HTML:显示页面,网…

    2022年7月7日
    24
  • ucos创建任务流程图_createthread函数的参数

    ucos创建任务流程图_createthread函数的参数uC/OS-III任务创建函数OSTaskCreate()1.OSTaskCreate()函数原型voidTaskCreate(OS_TCB*p_tcb,//任务控制OS_TCB的地址CPU_CHAR*p_name,//任务的名字OS_TASK_PTRp_task,//任务代码的起始地址void*p_arg,//任务第一次运行时接收到

    2025年9月17日
    4
  • TCP socket 编程原理 及 使用 socket 发送HTTP请求

    TCP socket 编程原理 及 使用 socket 发送HTTP请求1.TCPsocket编程原理?了解TCPsocket编程原理如何使用socket模块如何建立TCPsocket客户端和服务端客户端和服务端之间的通信socket建立连接的过程?服务器建立监听,socket,bind,listen客户端发送请求,connect,send连接确认,accept,response首先在服务器端建立…

    2022年10月18日
    8
  • 计算机 修改 虚拟ip,电脑虚拟ip地址怎么弄?「建议收藏」

    计算机 修改 虚拟ip,电脑虚拟ip地址怎么弄?「建议收藏」原标题:电脑虚拟ip地址怎么弄?在需要建立局域网和连接多台计算机时。我将重新设置电脑的IP地址,这样电脑就可以连上网了。因此,如何设置电脑的IP地址呢?以下是根据电脑原来的IP地址设置IP地址的共享方法。设置步骤:1、首先,右击桌面上的网络邻居,并在打开的菜单中选择该属性。2、在打开的“网络连接”属性菜单中找到本地连接,单击“本地连接”,然后点击“查看此连接状态”,即可打开本地连接。单击“支持”标…

    2022年10月12日
    3
  • Kali-linux :arping命令

    Kali-linux :arping命令ARP协议是“AddressResolutionProtocol”(地址解析协议)的缩写。在同一以太网中,通过地址解析协议,源主机可以通过目的主机的IP地址获得目的主机的MAC地址。arping程序就是完成上述过程的程序。arping,用来向局域网内的其它主机发送ARP请求的指令,它可以用来测试局域网内的某个IP是否已被使用。root@pgg:/home/pgg#arping–helpARPing2.21,byThomasHabetsthomas@habets.seusage:

    2022年5月7日
    45
  • 什么是静态代理和动态代理,两者的区别(笔记)「建议收藏」

    什么是静态代理和动态代理,两者的区别(笔记)「建议收藏」文章目录1.什么是代理?2.静态代理3.动态代理4.总结:1.什么是代理?​ 代理:就是让代理角色帮助真实角色完成一件事情;​ 举例:过年回家让朋友代买火车票,朋友帮你买火车票的过程就是代理2.静态代理​ 什么是静态代理:静态代理相当于是多写了一个代理类,在调用的时候调用的是代理类,在代理类中的处理还是原生的处理逻辑,不过在前后添加上需要添加的代码。缺点:需要为每一个被代理的对象都创建一个代理类。​ 特点:​ 代理角色和真实角色都需要实现同一个接口,​ 真实角色专注于自己的.

    2022年10月19日
    3

发表回复

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

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