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


相关推荐

  • 基于tensorflow的LSTM 时间序列预测模型

    时间序列预测(曲线回归或曲线拟合),结构为训练数据生成-》隐藏输入层-》LSTM神经层-》隐藏输入层-》结果,也可以采用LSTM神经层-》全连接层(多层的普通神经网络)构成,训练效果未对比,与参数调优相关。参数说明:TIME_STEPS:RNN训练的步数,一次训练输入的序列长度;INPUT_SIZE:输入序列中,单个输入的维度,用于曲线拟合或者回归的话,维度即为1;BATCH_SIZE:训练的批…

    2022年4月9日
    43
  • windows端口占用查看命令_win7端口怎么查看

    windows端口占用查看命令_win7端口怎么查看计算机“端口”是英文port的义译,可以认为是计算机与外界通讯交流的出口。其中硬件领域的端口又称接口,如:USB端口、串行端口等。软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。说白了,我们在计算机的任何操作都在有意无意的使用着计算机的各个端口,下面列出了计算机的常用端口。做个备忘。0端口:无效端口

    2025年11月2日
    11
  • OpenGL中的投影使用

    OpenGL中的投影使用

    2021年11月28日
    39
  • StretchBlt用法[通俗易懂]

    StretchBlt用法[通俗易懂]首先定义protected: BITMAPbmp;其次实现///////////////////////////////////////////////////////////////////////////////CExamineViewdrawingvoidCExamineView::OnDraw(CDC*pDC){ CExamineDoc*pDoc=GetDo

    2025年6月13日
    2
  • Ubuntu20.04安装Mysql

    Ubuntu20.04安装MysqlUbuntu20.04安装Mysql1.1下载安装MySQL1.2通过apt安装MySQL服务2.1初始化配置2.2检查mysql服务状态3.1配置远程访问3.2新建数据库和用户3.3mysql服务命令4、数据库操作命令4.1mysql服务操作4.2数据库操作4.3表操作4.4修改表结构4.5数据操作4.6数据的备份与恢复4.7卸载1.1下载安装MySQL在Ubuntu中,默认情况下,只有最新版本的MySQL包含在APT软件包存储库中,要安装它,只需更新服务器上的包索引并安装默认包apt-get

    2022年7月22日
    14
  • IO流的分类_io流的作用

    IO流的分类_io流的作用IO流的分类可以分为以下三种:第一种:输入流和输出流按照流的流向来分,可以分为输入流和输出流。输入,输出都是从程序运行所在内存的角度来划分的。输入流:只能从中读取数据,而不能向其写入数据,由InputStream和Reader作为基类。输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类第二种:字节流和字符流字节流和字符流的用法几乎完全一样,区…

    2022年10月20日
    3

发表回复

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

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