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

相关推荐

  • 顺丰科技QT面试题「建议收藏」

    顺丰科技QT面试题「建议收藏」自定义控件:应该做过吧?能举几个例子吗?还有其他的吗?你觉得自定义控件的方法主要是哪些?答:从外观设计上:QSS、继承绘制函数重绘、继承QStyle相关类重绘、组合拼装等等从功能行为上:重写事件函数、添加或者修改信号和槽等等QSS:QSS平时使用的多吗?能举几个例子吗?都是如何使用,能说说吗?答:1.将QSS统一写在一个文件中,通过程序给主窗口加载;2.写成一个字符串中,通过程序给主窗口加载;3.需要使用的地方,写一个字符串,加载给对象;4.QTDesigner中填写;事件机制:

    2022年6月25日
  • GridBagConstraints_gridlayout布局怎么用

    GridBagConstraints_gridlayout布局怎么用2019独角兽企业重金招聘Python工程师标准>>>…

    2022年9月8日
  • OpenCV 估算图像的投影关系:基础矩阵和RANSAC[通俗易懂]

    OpenCV 估算图像的投影关系:基础矩阵和RANSAC[通俗易懂]OpenCV 估算图像的投影关系:基础矩阵和RANSAC

    2022年4月20日
  • 操作系统中的进程调度策略有哪几种「建议收藏」

    操作系统中的进程调度策略有哪几种「建议收藏」先来先服务调度算法:先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到…

    2022年9月29日
  • 写一段代码在遍历 ArrayList 时移除一个元素?

    写一段代码在遍历 ArrayList 时移除一个元素?今天楼主继续分享一道经典Java面试题并进行相关知识点的拓展: 上题:写一段代码在遍历ArrayList时移除一个元素?该问题的关键在于面试者使用的是ArrayList的remove()还是Iterator的remove()方法。是使用正确的方式来实现在遍历的过程中移除元素,而不会出现ConcurrentModificationException异常的示例代码。…

    2022年7月22日
  • JavaSE: Java10的新特性

    JavaSE: Java10的新特性1.Java10的概述<1>Java10于2018年3月发布,改进的关键点包括一个本地类型推断、一个垃圾回收的增强<2>Java10计划只是一个短期版本,因此公开更新将在

    2022年7月4日

发表回复

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

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