目录
1 项目实例
框架如下:

2 必备信息统计
2.1 查看要测试的apk的信息
aapt dump badging xxx.apk
下图中框起来的即为appPackage

往下拉,找到launchable-activity,即为appActivity

2.2 查看模拟器地址、系统版本号
adb devices #查看模拟器地址

系统版本号:
在模拟器中“设置-关于”中查看

2.3 启动appium,并查看appium端口号
appium

2.4 查看安卓界面元素的路径
进入安卓adk的安装路径下的tools中,找到uiautomatorviewer.bat,如下:

需要先停掉appium,因为两者用的是相同的端口
1. 双击uiautomatorviewer.bat,启动
2. 在模拟器中打开被测app
3. 在uiautomatorviewer的界面中,点击工具栏第二个按钮 即可抓取模拟器当前的屏幕

我们要如何定位“立即进入”这个按钮呢,
- 点击上图中立即进入按钮
- 右侧展示的“resource-id”就是我们要用的
enter_button = (By.ID, 'com.sdguodun.qyoa:id/skip')
2.5 查找内嵌h5中元素的路径
找到上文中安装的uc devtools,按照上文中的12345步 定位就可以。上文地址:[python]appium+pytest+allure移动端自动化(一)环境搭建篇
3 开始搭架子
IDE:我用的vscode,推荐使用pycharm
我们采用page object的架构
建个工程,叫appium
建几个二级文件夹 case、pages、util、log、result、report、log
顾名思义:
case 存放测试用例
pages 存放页面对象、方法
util 存放工具类,如日志
log 存放日志
result 存放测试结果,allure生成报告需要的测试结果
report 存放生成的allure测试报告
log 存放日志
注:建二级子目录后,pycharm会自动添加__init__.py,但是vscode不会,我们需要在case、pages、util目录下手动添加__init__.py
4 开始写
4.1 先写一个简单的demo
目的:这个demo的实现启动app、点击或者滑动一下
case目录下创建demo.py,键入如下内容:
# -*- encoding: utf-8 -*-
from appium import webdriver
import time
# apk参数
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001', # 手机设备名称,通过adb devices查看
'platformVersion': '5.1.1', # android系统的版本号
'appPackage': 'com.aiosign.dzonesign', # apk包名
# apk的launcherActivity
'appActivity': 'com.aiosign.dzonesign.view.AppStartActivity',
# 由于测试的app中内嵌了h5,所以需要用到chromedriver,
# 下载对应版本的chromedriver.exe后放到D:\chromedriver路径中,在这里配置一下
'chromedriverExecutableDir':'D:\chromedriver',
}
# 启动app
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(3)
# 我的app启动后是欢迎页,需要滑动
# 获取屏幕尺寸
sizes = driver.get_window_size()
# 滑动
driver.swipe(sizes.get('width')*0.9, sizes.get('height')*0.5, sizes.get('width')*0.2, sizes.get('height')*0.5)
# 加入已经跳转到h5中
# 打印所有的context
contexts = driver.contexts
print(contexts)
# ['NATIVE_APP', 'WEBVIEW_com.sdguodun.qyoa']
# NATIVE_APP 就是安卓原生的
# WEBVIEW_com.sdguodun.qyoa 就是h5的
# 切换到h5
driver.switch_to.context('WEBVIEW_com.sdguodun.qyoa')
# 定位到元素,输入test
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div/div[1]/div[1]/div[1]/div[1]/div[2]/div/div/div/input').send_keys('test')
运行代码,看一下:

4.2 开始封装
4.2.1 封装PageObject
整个应用大概分为这么几个页面:
- 欢迎页
- 登录页
- 主页
所以,我们在pages目录下创建一个BasePage.py用来存放一些公用的方法,比如查找元素、查找一组元素、输入、左右上下滑动、截图等
再创建三个py文件分别为WelcomePage.py LoginPage.py MainPage.py,继承自BasePage.py,如下:

BasePage.py内容如下:
# -*- encoding: utf-8 -*-
'''
@File : BasePage.py
@Time : 2020/02/11 14:49:52
@Author : peace_su
@Version : 1.0
@Contact : peace_su@163.com
@WebSite : https://me.youkuaiyun.com/u010098760
'''
# here put the import lib
from selenium.webdriver.support.wait import WebDriverWait
# from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
from util.LoggingUtil import LoggingUtil
import logging
import datetime
class BasePage(object):
'''类注释
详细描述
Attributes:
属性说明
'''
def __init__(self, driver):
'''Class1类初始化方法
Args:
paramter1: 入参说明
paramter2: 入参说明
'''
self.driver = driver
LoggingUtil.setup_logging(LoggingUtil)
self.logger = logging.getLogger()
def find_element(self, *loc):
'''重写查找单个元素方法
'''
try:
WebDriverWait(self.driver, 5, 0.5).until(
EC.visibility_of_element_located(loc))
return self.driver.find_element(*loc)
except Exception:
# print('页面未找到元素')
self.logger.error('未找到元素:%s 请检查!' % loc[

最低0.47元/天 解锁文章
3234





