Python Selenium设计模式 - PO设计模式
PO模式6大原则
http://martinfowler.com/bliki/PageObject.html
https://www.selenium.dev/documentation/en/guidelines_and_recommendations/page_object_models/
封装、接口 不要暴露很多细节

1. 对页面的元素要进行封装
2. 不要暴露细节
3. 不要在封装的框架中做断言
4. 方法要返回其他页面的页面 : 从首页页面 通过注册按钮 跳转到注册页面 ,比如: 如果页面A导航到页面B,则pageA 应该return pageB (链式调用)
    
5. 不要对所有元素建模,仅对自己关注对元素建模 (只为页面中重要的元素创建page类 )
    
6. 如果结果不同,就算是同一个方法,也要封装成不同的方法 (测试的不同场景:注册成功 注册失败)
1. 原则

2. PO 模式封装的主要组成元素

3. BagePage的封装

4. 加入良好的日志方便定位

5. 数据驱动的应用

6. 外部数据源的选择
 
 
7. 测试策略

整理一下python selenium自动化测试实践中使用较多的po设计模式。
为什么要用PO
基于python selenium2开始开始ui自动化测试脚本的编写不是多么艰巨的任务。只需要定位到元素,执行对应元素的操作即可。
下面我们看一下这个简单的脚本实现百度搜索。

从上述代码来看,我们所能做的就是元素的定位,然后进行键盘输入或鼠标动作。就这个小程序而已,维护起来看起来是很容易的。
但随着时间的迁移,测试套件将持续的增长。脚本也将变的越来越多。如果我们需要维护10个页面,100个页面,甚至1000个呢?
那么页面元素的任何改变都会让我们的脚本维护变得繁琐复杂,而且变得耗时易出错。
那怎么解决呢?ui自动化中,常用的一种方式,引入Page Object(PO):页面对象模式来解决,po能让我们的测试代码变得可读
性更好,可维护性高,复用性高。 【封装、复用、逻辑更清晰】

PO是什么:
1、页面对象模型(PO)是一种设计模式,用来管理维护一组web元素的对象库
2、在PO下,应用程序的每一个页面都有一个对应的page class
3、每一个page class维护着该web页的元素集和操作这些元素的方法
4、page class中的方法命名最好根据对应的业务场景进行,例如通常登录后我们需要等待几秒钟,
我们可以这样命名该方法:waitingForLoginSuccess()。
下面我们看下PO的代码目录组织示例:

PO的优势
1、PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰。
2、页面对象与用例分离,使得我们更好的复用对象。
3、可复用的页面方法代码会变得更加优化
4、更加有效的命名方式使得我们更加清晰的知道方法所操作的UI元素。例如我们要回到首页,
方法命名为:gotoHomePage(),通过方法名即可清晰的知道具体的功能实现。
PO实现示例
下面看下使用PO设计模式构建的百度搜索用例,先看下代码组织结构如下:

#basePage.py代码如下

#searchPage.py代码如下

#testSearchPage.py代码如下

 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号