Appium+Python之PO模型(Page object Model)
思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解。这里推荐大家在自动化框架中加入PO模型思想,那什么是PO模型呢?
所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作;至于测试脚本要和ta区别开来,需要什么去这些页面类去调用即可。

上面流程图意思就是测试用例类调用不同的页面类,页面类调用公共基类,基类里面封装定义定位页面元素和基本业务操作方法。
BasePage.py(页面基类脚本)
# -*- coding: utf-8 -*-
'''
Created on 2018-11-4
@author: 丹姐
Project:UI页面公共类
''' from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import selenium.common.exceptions
from selenium.webdriver.common.by import By #定义页面基类
class BasePage(object):
#初始化
def __init__(self,driver):
self.driver=driver # 重写元素定位方法
def find_element(self,timeout,poll_frequency,type,*loc):
element=WebDriverWait(self.driver, timeout, poll_frequency).until(
EC.presence_of_element_located((type,*loc)))
return element # 重写定义send_keys方法
def send_keys(self,timeout,poll_frequency,type,loc,value):
try:
self.find_element(timeout,poll_frequency,type,loc).clear()
return self.find_element(timeout,poll_frequency,type,loc).send_keys(value)
except AttributeError:
print("%s 页面中未能找到 %s 元素" % (self,loc)) # 重写定义click方法
def click(self,timeout,poll_frequency,type,*loc):
return self.find_element(timeout,poll_frequency,type,*loc).click() # 重写多元素定位方法
def find_elements(self,timeout,poll_frequency,index,type,*loc ):
elements = WebDriverWait(self.driver, timeout, poll_frequency).until(
EC.presence_of_all_elements_located((type, *loc)))
return elements[index]
LoginPage.py(登录页面脚本)
# coding=utf-8
'''
Created on 2018-11-4
@author: 丹姐
Project:登录页面
'''
from src.common.BasePage import BasePage
from selenium.webdriver.common.by import By # 定义登录页面类,父类是BasePage class Login(BasePage):
etUser_loc = "com.baidu.baidu:id/et_name"
etPws_loc = "com.baidu.baidu:id/et_pass"
btnLogin_loc = "com.baidu.baidu:id/rt_login" def login_in(self, username, password):
print(u'输入用户名', username)
self.send_keys(10, 0.1, By.ID, self.etUser_loc, username)
print(u'输入密码', password)
self.send_keys(10, 0.1, By.ID, self.etPws_loc, password)
print(u'点击登录按钮')
self.click(20, 0.1, By.ID, self.btnLogin_loc)
TestCase.py(测试用例脚本)
# coding=utf-8
'''
Created on 2018-12-24
@author: 丹姐
Project:登录测试用例
'''
import unittest
from config import DriverConfigure
from src.pages.Login import Login class Login(unittest.TestCase):
@classmethod
def setUpClass(cls):
driver = DriverConfigure.get_driver()
cls.driver = driver def setUp(self):
self.login_page = Login(self.driver) def test_login(self):
# 登录
self.login_page.login_in("zhanghao", "") def tearDown(self):
pass @classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__ =="__main__":
unittest.main()
Appium+Python之PO模型(Page object Model)的更多相关文章
- Python+Selenium框架设计--- Page Object Model
POM(Page Object Model):页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想.采用POM的目的,是为了解决前端中UI变 ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- Selenium的PO模式(Page Object Model)[python版]
Page Object Model 简称POM 普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...
- Page Object Model (Selenium, Python)
时间 2015-06-15 00:11:56 Qxf2 blog 原文 http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...
- selenium page object model
Page Object Model (POM) & Page Factory in Selenium: Ultimate Guide 来源:http://www.guru99.com/page ...
- Selenium+Python :WebDriver设计模式( Page Object )
Page Object 设计原理 Page Object设计模式是Selenium自动化测试项目的最佳设计模式之一,强调测试.逻辑.数据和驱动相互分离. Page Object模式是Selenium中 ...
- Java&Selenium自动化测试之Page Object Model
PO是什么: 1.页面对象模型(PO)是一种设计模式,用来管理维护一组web元素的对象库 2.在PO下,应用程序的每一个页面都有一个对应的page class 3.每一个page class维护着该w ...
- python+selenium自动化软件测试(第7章):Page Object模式
什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页 ...
- Page Object设计模式(项目整体结构)
1. 什么是框架 1.1 定义: 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件(类)及构件(类)实例间交互的方法. 1.2 为什么要搭建自动化测试框架 自动化测试的开发, ...
随机推荐
- 接触oracle的第二天
1.2 Sqlplus 这是一个轻量级的功能强大的客户端, 是 dba 必须掌握的工具. 我们可以配置 sqlplus 的一些行为,两个命令: show. 用来显示配置参数 set. 用来设置配置参数 ...
- 在浏览器下载pdf,或者txt文档是会直接打开
window.location.href = url会直接打开,解释大概是因为浏览器自身可以解析.pdf或者txt.解决方法如下: 本来就要用a标签里面加上download属性的,结果发现不行,就算了 ...
- SQL Server参数优化
内存参数: 此处为512G物理内存,一般来说设置为物理内存80%左右,设置过大资源不会自动释放,内存可能会持续增长:设置过小资源浪费. CPU参数: 最大工作线程数: 此处为4个CPU40核,调整后物 ...
- es6 语法使用
一.相关背景介绍 我们现在大多数人用的语法javascript 其实版本是ecmscript5,也是就es5.这个版本己经很多年了,且完美被各大浏览器所支持.所以很多学js的朋友可以一直分不清楚es5 ...
- 【bzoj2821】作诗(Poetize)
*题目描述: 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗 之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次,每次只阅 ...
- C# 字符串的长度问题
string str = "aa奥奥"; 如果直接取 str.length,取的就是字符的长度,一个汉字也是一个字符,长度就是4. 一个汉字是两个字节,如果需要统计字节数,可以用下 ...
- Knapsack Cryptosystem
Knapsack Cryptosystem 超大背包 折半查找 #include<bits/stdc++.h> using namespace std; typedef long long ...
- 冲刺周二The Second Day
一.SecondDay照片 二.项目分工 三.今日份燃尽图 四.项目进展 码云团队协同环境构建完毕 利用Leangoo制作任务分工及生成燃尽图 完成AES加解密部分代码 用代码实现对文件的新建.移动. ...
- 20160419—JS备忘:服务器回发刷新页面提示重试的解决方案。
有事页面刷新时 提示如下: js使用的是:location.reload()的刷新方式. 使用js重新定向该页面:location.href="a.aspx"; 当使用:self. ...
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第5节 线程池_1_线程池的概念和原理
线程的底层原理 集合有很多种,线程池的集合用LinkedList最好