题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录:

Page Object

Page Object模式是使用Selenium的广大同行最为公认的一种设计模式。在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。

Page Object模式,创建一个对象来对应页面的一个应用。故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型。体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试。减少代码重复,提高测试代码的可读性和可维护性。

我理解就是:把重复用的代码封装成个方法 或者类,在维护脚本的时候只需要改一个地方,有点像解耦(请大神指教是这个意思吗?)

下面以登录为案例:使用的是unitest框架

image:放置每次执行用例的截图,方便调试

report:放置每次执行的测试报告

test_case:

  -drvier:封装了driver类

  -model:封装了从文件读取数据等一下工具类

  -page_object:存放一些页面的元素和定位文件,base.py 把selenium的定位重新封装;

case1

case2 : 真正的测试用例

run_all_test 执行用例

主要思路:在driver.py 封装了driver的方法, myunit.py 调用driver方法,在case类中继承myunit 类 就等于每次用例都有生产driver

driver.py:

def browser():

    desired_caps = {
'platformName':'Android',
'deviceName': '1f9XXXX08b',
'platformVersion':"5.1",
'appPackage':'com.XXXXXss',
'appActivity':'com.meXXXXXXXXs.activity.LoginActivity',
'unicodeKeyboard': True,
'resetKeyBoard': True,
"automationName":"uiautomator2" } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(10)
# d = driver.current_activity
# print(d) return driver

myunit.py

import driver

class MyTest(unittest.TestCase):

    def setUp(self):
self.driver = browser() #调用driver
self.driver.implicitly_wait(10) def tearDown(self):
self.driver.quit()

login_case.py

class LoginTest(myunit.MyTest):

    def test_login_user_null(self):
'''用户名为空'''
#配置IP地址
ipo = IPConfigPage(self.driver)
lpo = LoginPage(self.driver)
lpo.click_ip_btn()
ipo.ipconfig_action("127.0.0.1")
#配置登录信息
lpo.login_action("","")
result = driverwait.find_toast(self.driver, u'账号为空')
print(u"用户名和密码为空校验结果%s"%result)
function.insert_image(self.driver, "login_user_null.jpg")

最后总结:个人ui自动化测试局限性比较大,相对于接口自动化,俗话说越后介入成本越高,ui自动化属于中后期,需要在项目稳定情况,小公司很难用的上,如果遇到项目迭代快,需求变化大,维护成本过高。而接口自动化能更早介入测试较早介入测试,维护成本低,而且能部分解决安全问题,人力资源成本高相对

最新文章

  1. SubSonic3.0使用例子
  2. List<Map<String,Object>>使用Java代码遍历
  3. Silverlight 动画详解
  4. 数据库知识整理<三>
  5. 事故记录-过多进程致使CPU卡死
  6. paper 45:latex的使用
  7. 可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK
  8. maven本地仓库
  9. Howto: Deploy VC2008 apps without installing vcredist_x86.exe
  10. Eclipse开启与关闭代码自动提示功能
  11. 光流和KLT
  12. python 自定义回调函数
  13. 如何检测mvc性能和sql语句
  14. 【LOJ #6094. 「Codeforces Round #418」归乡迷途】
  15. vue+element-ui实现显示隐藏密码
  16. Flask性能优化对比
  17. MYSQL列表中常用语句代码块
  18. Hadoop环境搭建--Docker完全分布式部署Hadoop环境(菜鸟采坑吐血整理)
  19. 安卓学习 intent
  20. svg矢量图

热门文章

  1. 2019强网杯web upload分析(pop链)
  2. windows窗口启动redis
  3. day_04 基本数据类型的结构和使用方法
  4. react保存用户的输入换行,空格等等
  5. 算法——得到数据流中前K大的数
  6. javascript面向对象学习(一)
  7. FJOI2017 day2游记
  8. (54)LINUX应用编程和网络编程之九Linux网络通信实践
  9. [BZOJ4237]稻草人:CDQ分治+单调栈
  10. 聊聊 Vue 的双向数据绑定,Model 如何改变 View,View 又是如何改变 Model 的