[python]appium+pytest+allure移动端自动化(二)框架篇

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的界面中,点击工具栏第二个按钮 即可抓取模拟器当前的屏幕
在这里插入图片描述
我们要如何定位“立即进入”这个按钮呢,

  1. 点击上图中立即进入按钮
  2. 右侧展示的“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[
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值