前言
        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端自动化相关推荐

  1. Appium 移动端自动化 - Android SDK连接安卓手机,adb连接一加8手机USB调试实例演示,连接一加8手机不显示USB调试选项问题排查

    Android SDK 连接安卓手机过程演示 第一章:一加8手机连接过程 ① 启用开发者模式 ③ 开发者选项启用 USB 调试 ③ 手机连接 USB 调试 ④ 手机连接不显示 USB 调试选项问题排查 ...

  2. Appium 移动端自动化 - Android SDK的安装与配置,使用安卓SDK连接手机实例演示

    Android SDK 的安装与配置演示 第一章:Android SDK 的安装 ① 下载 ② 安装过程 ③ 配置 第二章:连接手机 USB 调试 ① 一加8手机连接演示 第一章:Android SD ...

  3. Web 端自动化神器Automa,批量下载美图,可做封面

    文章目录 Automa介绍 Automa安装 本文的目标 自动搜索 自定义数据下载 批量下载美女封面 实现的效果 品尝下载的美图 总结 参考 低代码 | 美图秀色可餐 | 可做封面 Automa介绍 ...

  4. App 端自动化的最佳方案,完全解放双手!

    点击上方 "AirPython",选择 "加为星标" 第一时间关注 Python 原创干货! 1. 前言 大家好,我是安果! 之前写过一篇文章,文中提出了一种方 ...

  5. APPium+Python编写真机移动端自动化脚本

    前置条件 完成软件和环境的安装后就可以开始移动端自动化脚本的编写了. 连接设备 手机打开USB调试模式,连接手机.此时去命令窗口查看自己的设备是否已经连接. 让后打开Appium Server,进行配 ...

  6. windows端自动化遇到的问题

    1. 问题:OSError: [WinError 740] 请求的操作需要提升 解决方案: import os import sys import win32com.shell.shell as sh ...

  7. 移动端自动化任务-AutoJs Pro v9使用教程(一)

    官网 - Auto.js Pro Github代码示例 教程与博客 (autojs.org) 开源版文档 Pro 版 API 旧文档 Pro 版 v9新文档 一.前言 本教程是本人学习 Auto.js ...

  8. 面经---测试工程师web端自动化---大厂面试题

    前言: 一.Web 自动化测试 1.Selenium 中 hidden 或者是 display = none 的元素是否可以定位到? 不能,可以写 JavaScript 将标签中的 hidden 先改 ...

  9. 移动端自动化工具概述

    AutomateIt.Automate.按键精灵.AutoJS-等Android自动化工具有什么特点? 这几款工具,都是自动化工具,大致可以分为两类,全自动化工具及半自动化脚本工具.各有千秋,建议根据 ...

最新文章

  1. animate.css动画抖动,Animate.css抖动效果每次都不工作
  2. python消息队列celery_消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同?...
  3. 计算机科学AP考试,AP计算机科学A和计算机原理有什么区别
  4. 软件工程实践2017第一次作业-051502125
  5. 关于vue项目中添加less,less-loader不能运行的问题
  6. Oracle 中调用外部C动态库函数
  7. CloudFoundry基础知识之理论篇
  8. 【数据结构】30、hashmap=》hash 计算方式
  9. Ubuntu gedit中文乱码-转
  10. java反射作用与意义
  11. AHOI2018训练日程(3.10~4.12)
  12. 深入浅出VMware——虚拟机暂停后生成的文件
  13. GJB 质量保证大纲(模板)
  14. 2018 ACM-ICPC, Syrian Collegiate Programming Contest
  15. mysql数据库出现缓慢_MySQL查询缓慢的N种原因,以及N+1种解决方法
  16. c语言 vc++6.0 插入图片,C语言VC++6.0环境中如何插入图片
  17. 微信小程序的事件处理,已整理成文档
  18. 北京冬奥村:让科技蕴含温度
  19. 微软azure服务器配置,配置持续部署 - Azure App Service | Microsoft Docs
  20. IBM3650M4实体机安装ESXI7.0

热门文章

  1. Juicer软件的安装详解
  2. Software Performance Testing - Gatling测试脚本编写
  3. Unity Text文字自动滚动
  4. 工作十年:从大厂到小厂
  5. 华为Linux送的u盘,微软无奈,断供系统没用,华为和荣耀给用户赠送带Windows的U盘...
  6. 小程序消息推送配置服务器修改,微信小程序——消息推送配置
  7. [Mugeda HTML5技术教程之19]制作可定制贺卡
  8. 蓝牙音乐之AVRCP在安卓系统中的实现
  9. Perl - use strict
  10. 火车上免费WiFi,而非车站WiFi