09.06app端自动化
前言
POM是移动自动化所用的模型,POM模型与web自动化中的PO模型非常相似。因此主要描述两者的不同与实例。
一、POM模型
POM(page object model)页面对象模型,主要应用于UI自动化测试框架的搭建,主流设计模式之一,页面对象模型:结合面向对象编程思路:把项目的每个页面当做一个对象进行编程。
第一层:basepage层:描述每个页面相同的属性及行为
第二层:pageobject层(每个的独有特征及独有的行为)
第三层:testcase层(用例层,描述项目业务流程)
第四层:testdata(数据层)
二、引入yaml文件
yaml文件:数据层次清晰,可以跨平台,支持多种语言使用(可以适用于别的app)
优化代码:提取basepage中的配置客户端数据(将配置的数据放在yaml中) 创建config--config.yam
yaml文件展示(主要存放用于连接的参数,注意这样缩进打印结果是字典套字典)
caps:platformName: AndroiddeviceName: emulator-5554appPackage: com.vphone.launcherappActivity: com.vphone.launcher.Launcher
读取模块
首先需要导入第三方包 :
pip install pyYAML
(打印结果是字典套字典)
import yaml
def readYaml(path):with open(path,"r",encoding="utf-8") as file:data = yaml.load(stream=file,Loader=yaml.FullLoader)return dataprint(readYaml(r'F:\Python_Project\app_auto_po\data\data.yaml'))'''
{'caps': {'platformName': 'Android', 'deviceName': '127.0.0.1:62001', 'appPackage': 'com.vphone.launcher', 'appActivity': 'com.vphone.launcher.Launcher'}}
'''
三、实例
basepage (存放公用方法)
from appium.webdriver.common.touch_action import TouchAction
class BasePages:def __init__(self,driver):self.driver = driver#元素定位def locator(self,*loc):return self.driver.find_element(*loc)#清空def clear(self,*loc):self.locator(*loc).clear()#输入def input(self,test,*loc):self.locator(*loc).send_keys(test)#点击def click_e(self,*loc):self.locator(*loc).click()#点击坐标轴def click_l(self,n,m):TouchAction(self.driver).tap(x =n,y = m).perform()#滑动(上下左右滑动)def swipe(self,start_x,start_y,end_x,end_y,duration=0):#获取屏幕的尺寸window_size = self.driver.get_window_size()x = window_size["width"]y = window_size["height"]self.driver.swipe(start_x=x*start_x,start_y=y*start_y,end_x= x*end_x,end_y=y*end_y,duration=duration)data(存放数据)
pageone
from basepage.base import BasePages
from appium.webdriver.common.mobileby import MobileBy
class PageOne(BasePages):def __init__(self,driver):BasePages.__init__(self,driver)#元素定位def danji(self):self.click(MobileBy.XPATH,"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.LinearLayout[1]/android.widget.Button[1]")
pagetwo
from basepage.base import BasePages
from appium.webdriver.common.mobileby import MobileBy
class PageTwo(BasePages):def __init__(self,driver):BasePages.__init__(self,driver)#点击搜索框def dianji(self):self.click(MobileBy.ID,"fengchedongman.apps.com:id/lx")#输入内容def shuru(self,text):self.input(text,MobileBy.ID,'fengchedongman.apps.com:id/a0o')#点击搜索def sousuo(self):self.click(MobileBy.ID,'fengchedongman.apps.com:id/a0j')
pagethree
from basepage.base import BasePages
from appium.webdriver.common.mobileby import MobileBy
class PageThree(BasePages):def __init__(self,driver):BasePages.__init__(self,driver)#添加到书架def tianjia(self):self.click(MobileBy.ID,'fengchedongman.apps.com:id/gu')
po模型代码
from appium import webdriver
import unittest,time
from pages.pageone import PageOne
from pages.pagetwo import PageTwo
from pages.pagethree import PageThree
class TestClass(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:caps = {}caps["deviceName"] = "emulator-5554"caps["platformName"] = "Android"caps["appPackag"] = "fengchedongman.apps.com"caps["appActivity"] = "com.Stub.App"cls.driver=webdriver.Remote("http://localhost:4723/wd/hub", caps)cls.driver.implicitly_wait(30)def test_001(self):p1=PageOne(self.driver)p1.danji()def test_002(self):p2=PageTwo(self.driver)p2.dianji()p2.shuru("逆天邪神")p2.sousuo()def test_003(self):p3=PageThree(self.driver)p3.tianjia()@classmethoddef tearDownClass(cls) -> None:time.sleep(15)
if __name__ == '__main__':unittest.main()
09.06app端自动化相关推荐
- Appium 移动端自动化 - Android SDK连接安卓手机,adb连接一加8手机USB调试实例演示,连接一加8手机不显示USB调试选项问题排查
Android SDK 连接安卓手机过程演示 第一章:一加8手机连接过程 ① 启用开发者模式 ③ 开发者选项启用 USB 调试 ③ 手机连接 USB 调试 ④ 手机连接不显示 USB 调试选项问题排查 ...
- Appium 移动端自动化 - Android SDK的安装与配置,使用安卓SDK连接手机实例演示
Android SDK 的安装与配置演示 第一章:Android SDK 的安装 ① 下载 ② 安装过程 ③ 配置 第二章:连接手机 USB 调试 ① 一加8手机连接演示 第一章:Android SD ...
- Web 端自动化神器Automa,批量下载美图,可做封面
文章目录 Automa介绍 Automa安装 本文的目标 自动搜索 自定义数据下载 批量下载美女封面 实现的效果 品尝下载的美图 总结 参考 低代码 | 美图秀色可餐 | 可做封面 Automa介绍 ...
- App 端自动化的最佳方案,完全解放双手!
点击上方 "AirPython",选择 "加为星标" 第一时间关注 Python 原创干货! 1. 前言 大家好,我是安果! 之前写过一篇文章,文中提出了一种方 ...
- APPium+Python编写真机移动端自动化脚本
前置条件 完成软件和环境的安装后就可以开始移动端自动化脚本的编写了. 连接设备 手机打开USB调试模式,连接手机.此时去命令窗口查看自己的设备是否已经连接. 让后打开Appium Server,进行配 ...
- windows端自动化遇到的问题
1. 问题:OSError: [WinError 740] 请求的操作需要提升 解决方案: import os import sys import win32com.shell.shell as sh ...
- 移动端自动化任务-AutoJs Pro v9使用教程(一)
官网 - Auto.js Pro Github代码示例 教程与博客 (autojs.org) 开源版文档 Pro 版 API 旧文档 Pro 版 v9新文档 一.前言 本教程是本人学习 Auto.js ...
- 面经---测试工程师web端自动化---大厂面试题
前言: 一.Web 自动化测试 1.Selenium 中 hidden 或者是 display = none 的元素是否可以定位到? 不能,可以写 JavaScript 将标签中的 hidden 先改 ...
- 移动端自动化工具概述
AutomateIt.Automate.按键精灵.AutoJS-等Android自动化工具有什么特点? 这几款工具,都是自动化工具,大致可以分为两类,全自动化工具及半自动化脚本工具.各有千秋,建议根据 ...
最新文章
- animate.css动画抖动,Animate.css抖动效果每次都不工作
- python消息队列celery_消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同?...
- 计算机科学AP考试,AP计算机科学A和计算机原理有什么区别
- 软件工程实践2017第一次作业-051502125
- 关于vue项目中添加less,less-loader不能运行的问题
- Oracle 中调用外部C动态库函数
- CloudFoundry基础知识之理论篇
- 【数据结构】30、hashmap=》hash 计算方式
- Ubuntu gedit中文乱码-转
- java反射作用与意义
- AHOI2018训练日程(3.10~4.12)
- 深入浅出VMware——虚拟机暂停后生成的文件
- GJB 质量保证大纲(模板)
- 2018 ACM-ICPC, Syrian Collegiate Programming Contest
- mysql数据库出现缓慢_MySQL查询缓慢的N种原因,以及N+1种解决方法
- c语言 vc++6.0 插入图片,C语言VC++6.0环境中如何插入图片
- 微信小程序的事件处理,已整理成文档
- 北京冬奥村:让科技蕴含温度
- 微软azure服务器配置,配置持续部署 - Azure App Service | Microsoft Docs
- IBM3650M4实体机安装ESXI7.0
热门文章
- Juicer软件的安装详解
- Software Performance Testing - Gatling测试脚本编写
- Unity Text文字自动滚动
- 工作十年:从大厂到小厂
- 华为Linux送的u盘,微软无奈,断供系统没用,华为和荣耀给用户赠送带Windows的U盘...
- 小程序消息推送配置服务器修改,微信小程序——消息推送配置
- [Mugeda HTML5技术教程之19]制作可定制贺卡
- 蓝牙音乐之AVRCP在安卓系统中的实现
- Perl - use strict
- 火车上免费WiFi,而非车站WiFi