1.POM及POM设计原理

POM(page object model)页面对象模型,主要应用于UI自动化测试框架的搭建,主流设计模式之 一,页面对象模型:结合面向对象编程思路:把项目的每个页面当做一个对象进行编程

2.POM一般分为四层

第一层:basepage层:描述每个页面相同的属性及行为
第二层:pageobject层(每个的独有特征及独有的行为)
第三层:testcase层(用例层,描述项目业务流程)
第四层:testdata(数据层)

3.代码实现

1.组织代码

2.basepage(封装公共的属性和行为)

from selenium.webdriver.support.wait import WebDriverWaitclass 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, text, *loc):self.locator(*loc).send_keys(text)# 点击def click(self, *loc):self.locator(*loc).click()# 滑动(上下左右滑动)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)

3.pageobject(导航模块和登录模块)

1.导航模块

from POM.basepage.base_page import BasePages
from appium.webdriver.common.mobileby import MobileByclass DaohangPage(BasePages):def __init__(self,driver):BasePages.__init__(self,driver)def click_login(self):self.click(MobileBy.XPATH,"//*[contains(@text,'登录')]")

2.登录模块

from POM.basepage.base_page import BasePages
from appium.webdriver.common.mobileby import MobileByclass LoginPage(BasePages):def send_user(self,text):self.input(text,MobileBy.ACCESSIBILITY_ID,"请输入QQ号码或手机或邮箱")def send_password(self,text):self.input(text,MobileBy.ACCESSIBILITY_ID,"密码 安全")def click_login_qq(self):self.click(MobileBy.ACCESSIBILITY_ID,"登 录")

4.testcase(执行测试用例)

from POM.pageobject.daohang_page import DaohangPage
from POM.pageobject.login_page import LoginPage
from POM.testdata.readyaml import readyaml
from appium import webdriver
import pytest,time,osclass TestClass:@classmethoddef setup_class(cls) -> None:cap={}cap["platformName"]= "Android"cap["deviceName"]="127.0.0.1:62001"cap["appPackage"]= "com.tencent.mobileqq"cap["appActivity"]="com.tencent.mobileqq.upgrade.activity.UpgradeActivity"cls.driver=webdriver.Remote("http://localhost:4723/wd/hub",cap)cls.driver.implicitly_wait(30)def test_01(self):daohang=DaohangPage(self.driver)daohang.click_login()def test_02(self,user,password):login=LoginPage(self.driver)login.send_user("xxx")login.send_password("xxx")login.click_login_qq()@classmethoddef teardown_class(cls) -> None:cls.driver.quit()if __name__ == '__main__':pytest.main(["test_case.py"])

4.引入yaml文件(代码优化)

yaml文件:数据层次清晰,可以跨平台,支持多种语言使用(可以适用于别的app)

优化代码:提取basepage中的配置客户端数据(将配置的数据放在yaml中)!创建一个yaml.yaml文件

caps:platformName: AndroiddeviceName: 127.0.0.1:62001appPackage: com.tencent.mobileqqappActivity: com.tencent.mobileqq.activity.LoginActivity

读取yaml文件,需要导入pip install pyYAML

import yaml,os
def readyaml(path):with open(path,'r',encoding='utf-8') as f:data=yaml.load(stream=f,Loader=yaml.FullLoader)return data
# os.path.dirname(__file__)当前文件的上一级目录
# os.path.abspath(path)找到路径的绝对路径
rpath=os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
ph=os.path.join(rpath,'testdata/yaml.yaml')

优化单元测试模块代码

from POM.pageobject.daohang_page import DaohangPage
from POM.pageobject.login_page import LoginPage
from POM.testdata.readyaml import readyaml
from appium import webdriver
import pytest,time,osclass TestClass:@classmethoddef setup_class(cls) -> None:rpath = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))ph = os.path.join(rpath, 'testdata/yaml.yaml')data=readyaml(ph)cls.driver=webdriver.Remote("http://localhost:4723/wd/hub",data['caps'])cls.driver.implicitly_wait(30)def test_01(self):daohang=DaohangPage(self.driver)daohang.click_login()def test_02(self,user,password):login=LoginPage(self.driver)login.send_user("xxx")login.send_password("xxx")login.click_login_qq()@classmethoddef teardown_class(cls) -> None:cls.driver.quit()if __name__ == '__main__':pytest.main(["test_case.py"])

5.添加数据驱动

在pytest中使用@pytest.mark.parametrize()修饰器

from POM.pageobject.daohang_page import DaohangPage
from POM.pageobject.login_page import LoginPage
from POM.testdata.readyaml import readyaml
from appium import webdriver
import pytest,time,osclass TestClass:@classmethoddef setup_class(cls) -> None:rpath = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))ph = os.path.join(rpath, 'testdata/yaml.yaml')data=readyaml(ph)cls.driver=webdriver.Remote("http://localhost:4723/wd/hub",data['caps'])cls.driver.implicitly_wait(30)def test_01(self):daohang=DaohangPage(self.driver)daohang.click_login()@pytest.mark.parametrize("user,password", [("xxx", "zzz")])def test_02(self,user,password):login=LoginPage(self.driver)login.send_user(user)login.send_password(password)login.click_login_qq()@classmethoddef teardown_class(cls) -> None:cls.driver.quit()if __name__ == '__main__':pytest.main(["test_case.py"])

Python+Appium+POM实现APP端自动化测试相关推荐

  1. Web/app端自动化测试对比

    Web/app端自动化测试 做了一段时间的Android自动化测试,对比个人之前做的web端自动化测试,有一些感想.(由于个人接触的时间也不是太久,很多东西理解也并不深刻,先写下菜鸟时期的感想.) 区 ...

  2. Web端与App端自动化测试框架

    Web端与App端自动化测试框架 一.Web端与App端的区别 想了解Web端与App端自动化测试框架的区别 ,那么我们就要先来了解Web和App的区别.Web项目一般都是B/S架构,基于浏览器的,而 ...

  3. 【k.11】python+appium+雷电模拟器 app自动化测试 demo 教学

    一.首页讲解一下每个部分的作用: 1.雷电模拟器相当于一台手机,里面安装被测试的软件app 2.appium相当于一个链接python脚本和雷电模拟器的桥梁 3.python,编写控制app的脚本代码 ...

  4. python+appium+雷电模拟器 app自动化测试

    一.环境准备  1.jdk1.8 2.android-sdk-windows 3.appium-desktop-setup-1.11.0(直接搜索appium进入官网下载) 4.Appium-Pyth ...

  5. python+appium判断元素存在_python自动化测试应用--Appium元素篇

    1.1概要 本篇将对和界面元素相关的内容做讲解,比如,查找元素的几种常见方法,还将介绍如何查看app界面上的元素去做定位,最后还将新手经常遇到的问题做个简单的回答. 1.2 查找app界面元素的工具 ...

  6. 2022软件测试技能 APP自动化测试 Python+Appium+Uiautomator2 实战教程

    系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录 系列文章目录 前言 一.Appium 原理 二.环境搭建,一键搞定 1. 安装Java JDK 2. Android SDK 安装与配置 3. ...

  7. python手机端编程环境_移动端自动化测试解决方案(Appium + Python) - (1) 环境搭建...

    最近对iOS自动化测试做了一番探究,希望通过自动化测试更好的去提高公司项目的测试效率 .在网上找了很多的文章和相关资料,都因为时间比较久导致无法实现基本环境的搭建,我在这儿分享给大家分享我的实现过程. ...

  8. python+appium自动化测试如何控制App的启动和退出

    由于本人使用的是Android设备做自动化测试,所以以下内容均基于Android系统做出的整理 一.启动app 启动app需要设置Capability参数,而Capability参数放在Desired ...

  9. APP自动化测试框架搭建(五)--Python+Appium+pytest-html

    第一章 APP自动化环境搭建(Mac版) 第二章 APP自动化环境搭建(Windows版) 第三章 adb命令 第四章 元素定位.元素操作 第五章 APP自动化测试框架搭建 Python+Appium ...

最新文章

  1. wordpressPHP实现ajax评论,wordpress无刷新评论:无需插件ajax实现wordpress comment无刷新机制...
  2. python读取文件名-python读取文件名并改名字的实例
  3. 目前的计算机还没有实现真正的智能
  4. JSP + AJAX 打造簡單聊天室
  5. 系统间数据交互注意项
  6. 微信小程序websocket连接服务器(接收信息)
  7. WCF中的方法重载 实现
  8. 增加表空间大小的四种方法
  9. [TaskList] 省选前板子补完计划
  10. IT人才需要怎样的沟通表达能力
  11. 选择器、像素和百分比、颜色单位、文档流-css基础
  12. 华为交换机关闭网口_关闭端口的命令 怎么开启华为交换机关闭端口,命令谁知道啊。...
  13. 开源力量 Linux内核源码深度解析与开发实战
  14. SQL SERVER 资源性能监控-资源监视器
  15. 正式版苹果雪豹操作系统光盘镜像
  16. 三年程序员成功转型项目经理
  17. HTML5 学习总结(一)——HTML5概要与新增标签
  18. 视频超分修复,让重温经典影片有了新的可能
  19. 产品经理 - 路漫漫其修远兮
  20. 为什么需要克隆虚拟机,虚拟机又该怎样克隆呢?

热门文章

  1. 1.16 快速排序法(Quicksort)
  2. 【PAT乙级】1059 C语言竞赛 (20 分)
  3. Spring boot的Webjars
  4. Table表格的单元格提示
  5. 计算机组成名词解释移码,自考“计算机组成原理”串讲资料
  6. python读文件去除空行_「34」Python文件操作经典案例:CSV文件的读与写
  7. 奖客富翁系统python_作业 2018-12-28 20.1 奖客富翁
  8. Java之反射代码演示说明
  9. LeetCode 17电话号码的字母组合(搜索)18四数之和
  10. 线性表实现一元多项式的表示及相加(C语言实现)【线性表】