python+Appium自动化:PageObject设计模型
时间:2019-12-26
本文章向大家介绍python+Appium自动化:PageObject设计模型,主要包括python+Appium自动化:PageObject设计模型使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
PageObject设计模型
Page Object模式是使用Selenium的广大同行最为公认的一种设计模式。
在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。
体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试。
减少代码重复,提高测试代码的可读性和可维护性。
比如封装app启动的配置信息
desired_caps.py
# -*- coding: utf-8 -*-# from appium import webdriver import yaml import logging import logging.config #log提取、输出 CON_LOG='../log/log.conf' logging.config.fileConfig(CON_LOG) logging=logging.getLogger() #封装成一个方法 def appium_desired():
#调用yaml的配置
file = open('../case/capability.yaml',encoding="utf-8")
data = yaml.load(file,yaml.FullLoader)
desired_caps={ "platformName": data["platformName"], "platformVersion": data["platformVersion"], "deviceName": data["deviceName"], "appPackage": data["appPackage"], "appActivity": data["appActivity"], "unicodeKeyboard":data["unicodeKeyboard"], "resetKeyboard":data["resetKeyboard"], "noReset": data["noReset"] } logging.info("logging app...") driver = webdriver.Remote('http://'+str(data['ip'])+':'+str(data['port'])+'/wd/hub',desired_caps) return driver #调用方法 if __name__=="__main__": appium_desired()
然后写一个公共类,先写封装一个基类,用于driver、基础定位的调用
BaseView.py
# -*- coding: utf-8 -*-# #封装基类 class BaseView(object): def __init__(self,driver): self.driver=driver def find_element(self,*loc): return self.driver.find_element(*loc)
然后写一个启动淘宝的公共类封装
# -*- coding: utf-8 -*-# #封装公共类 from Appiumtaobao.page_object.BaseView import BaseView from Appiumtaobao.page_object.desired_caps import appium_desired from selenium.common.exceptions import NoSuchElementException import logging from selenium.webdriver.common.by import By class common(BaseView): agreebtn=(By.ID,"com.taobao.taobao:id/provision_positive_button") localtionbtn=(By.ID,"com.taobao.taobao:id/uik_mdButtonDefaultPositive") #同意协议按钮 def check_agreebtn(self): logging.info('==========check_agreebtn==========') try: agreebtn=self.driver.find_element(*self.agreebtn) except NoSuchElementException: logging.info("no agreebtn") else: agreebtn.click() #获取位置权限 def check_localtionbtn(self): logging.info("===========check_localtionbtn===========") try: localtionbtn=self.driver.find_element(*self.localtionbtn) except NoSuchElementException: logging.info("no localtionbtn") else: localtionbtn.click() if __name__=="__main__": driver=appium_desired() com=common(driver) com.check_agreebtn() driver.implicitly_wait(3) com.check_localtionbtn()
原文地址:https://www.cnblogs.com/bugbreak/p/12102886.html
- Pegasus间谍套件内部原理及流程剖析
- 用node.js实现ORM的一种思路
- iOS“远程越狱”间谍软件Pegasus技术分析
- 学习HTML5之表单
- 基于jQuery的ajax对WebApi和OData的封装我们还是先来看看要求在看看目标:思路封装方式
- js的动态加载、缓存、更新以及复用(四)
- ajax的再次封装!(改进版) —— new与不 new 有啥区别?
- ajax的再次封装!
- 【自然框架】js版的QuickPager分页控件 V2.0
- 你的SQL语句放在了哪里?
- oclhashcat:离线hash密码破解工具官方文档(中文版)
- 如何动态加载js?
- 【自然框架】数据访问之精雕细琢(一)存储过程的参数
- 100w条记录分页,可以有多快?—— DataReader分页与SQL语句分页的对比测试(在线演示)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法