移动端测试——App基础操作(2)

Appium

1.1 App基础操作 API

完成app自动化需要一些基础条件的支持:APP初始化API

1.1.2 基础操作命令

1. 前置代码

# 导入driver对象
 from appium import webdriver

import time

# server 启动参数
desired_caps = {}
# 设备信息(系统、版本、设备号)
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '9'
desired_caps['deviceName'] = '192.168.72.103:5555'
# app信息(包名、启动名)
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'

# 声明driver对象
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

time.sleep(5)
# 关闭驱动对象
driver.quit()

2. 操作与命令

操作 命令
安装APK到手机
(调用driver)
driver.install_app(app_path)

参数:

app_path(脚本机器中APK文件路径)x:/xxx.apk

注意:

必须是绝对路径且是/

eg:

driver.install_app(‘D:/PycharmProjects/test/apk/Greenify.apk‘)

安装APK到手机
(调用adb)
import os

os.system("adb install 路径")

参数:

app_path(脚本机器中APK文件路径)

格式:x:/xxx.apkx/xxx.apk

eg:

os.system("adb install apk/Greenify.apk")

手机中移除APP driver.remove_app(app_id)

参数:

app_id(需要卸载的app包名)

提醒:

包名/启动名获取:

adb shell dumpsys window windows \| grep mFocusedApp \| cut -d " " -f 7

判断APP是否已安装 driver.is_app_installed(bundle_id)

参数:

bundle_id

可以传入app包名,返回结果为True(已安装) / False(未安装)

发送文件到手机 import base64

base64编码-encode

data = str(base64.b64encode(data.encode(‘utf-8‘)),‘utf-8‘)

driver.push_file(path,data)

参数:

path:手机设备上的路径(例如:/sdcard/a.txt)

data:文件内数据,要求base64编码

Python3.x中字符都为unicode编码,而b64encode函数的参数为byte类型,需要先转码

生成的数据为byte类型,需要将byte转换回去

从手机中拉取文件 import base64

返回数据为base64编码

data = driver.pull_file(path)

base64解码-decode

print(str(base64.b64decode(data),‘utf-8‘))

参数:

path: 手机设备上的路径

获取当前屏幕内元素结构 driver.page_source

作用:

返回当前页面的文档结构,判断特定的元素是否存在

不包括需要滚动才看到的页面

参阅:

3. 应用

  • 判断APP是否安装,存在则卸载,不存在则安装
# 判断APP是否安装,存在则卸载,不存在则安装

if driver.is_app_installed("com.oasisfeng.greenify"):
     driver.remove_app("com.oasisfeng.greenify")
else:
     driver.install_app("D:/PycharmProjects/test/apk/Greenify.apk")
  • 判断当前设置页面是否有"网络和互联网"和 "电池"
# 获取当前页面内的元素结构
current_page_data  = driver.page_source

for i in ("网络和互联网", "电池"):
    if i in current_page_data:
        print("True")
    else:
        print("False")

4. 整理与总结

  • 初始化
    vim initDriver.py
from appium import webdriver
import os

def init_driver():
    desired_caps = {
        # 系统
        'platformName': 'Android',
        # 版本
        'platformVersion': '9',
        # 设备号
        'deviceName': 'os.system("adb devices")|sed -n "2p"|cut -d " " -f 1',
        # 包名
        'appPackage': 'com.android.settings',
        # 启动名
        'appActivity': '.Settings',
        # 安装的APP
        # 'app': 'apk/xx.apk',
    }
    # 声明手机驱动对象
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
    return driver
  • 主程序
    vim main.py
from init_driver.initDriver import init_driver
import os
import time
import base64

def push_myfile(tag, pc_path, phone_path, driver=None):
    # 电脑发送文件给手机
    # tag=1调用adb,tag=2调用appium
    if tag == 1:
        os.system("adb push %s %s" % (pc_path, phone_path))
    if tag == 2:
        with open(pc_path, 'r') as f:
            data = str(base64.b64encode(f.read().encode('utf-8')), 'utf-8')
            driver.push_file(phone_path, data)

# def install_myapp(tag, path):

if __name__ == '__main__':
    driver = init_driver()

    # adb方式校验
    push_myfile(tag=1, pc_path="hello.txt", phone_path="/sdcard/test.txt")

    # Appium方式校验
    push_myfile(tag=2, pc_path="hello.txt", phone_path="/sdcard/test.txt", driver=driver)
    driver.quit()

1.2 手机控件查看工具uiautomatorviewer

用来扫描和分析Android应用程序的UI控件的工具

1.2.1 uiautomatorviewer使用

1. 使用工具
  • 确保模拟机打开且没有连接上ADB
    adb kill-server
  • 运行批处理文件

  • 效果

2. Q&A

(1) 使用SDK自带的uiautomatorviewer.bat调用uiautomatorviewer.jar打开Ui Aotumator Viewer程序容易产生以下问题:

产生原因:
真机或模拟机的安卓系统版本与uiaotumatorviewer.jar的兼容性问题

解决方法(已成功):

参阅:

名称 Windows的说明
相关工具 https://www.lanzous.com/b944571/5kx9
uiautomatorviewer.jar 下载后,进入 xxx/android-sdk/tools/lib目录

先备份原来的jar包,再复制下载的jar包到该目录中

LvmamaXmlKit.jar 将该文件发送到手机的/data/local/tmp/

adb push LvmamaXmlKit.jar /data/local/tmp/

验证:

adb shell

ls /data/local/tmp

ADBKeyBoard.apk 将该文件发送到手机的/sdcard

adb push ADBKeyBoard.apk /sdcard

重启手机,运行uiaotumatorviewer.bat即可

参阅:

  • 更换默认输入法

参阅:



更新中......



移动端测试——App基础操作(2)

原文地址:https://www.cnblogs.com/ricsy/p/11581642.html

时间: 2024-11-08 07:43:05

移动端测试——App基础操作(2)的相关文章

移动端测试——APP元素信息[事件]操作API和APP模拟手势高级操作(4)

appium基础API 1.1 APP元素信息操作API 介绍手机端元素信息的获取以及基本的输入操作 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号) desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '9' desired_cap

移动端测试——APP元素定位操作 (3)

一.appium基础API讲解 1.1 APP元素定位操作 建议: 使用显示等待 能用id.class定位就不用xpath定位 只要看的见的,用xpath的text就是万能的 手工测试主要通过可见按钮操作,而自动化是通过元素进行交互操作 元素的基本定位基于当前屏幕范围内展示的可见元素 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号

移动端测试——手机常见操作的API (5)

appium基础API 1.1 常用的手机操作API 针对手机的一些常用设置功能进行操作 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号) desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '9' desired_caps['dev

2.移动端测试环境准备

1.第一阶段移动端测试环境搭建 移动端自动化测试的基础环境配置 1.1 安装Java环境 Android应用为例讲解,需要安装java环境 1.2 SDK环境 Android依赖SDK的环境 1.3 模拟器环境 考虑大家连接真机不方便,所以采用模拟器替代 1.1.Java环境安装 1.1.1 安装JDK1.8 运行jdk-8u151-windows-x64.exe文件,默认安装即可(例如我的安装目录:C:\Program Files\Java\jdk1.8.0) 1.1.2 配置java环境变量

Hybrid APP基础篇(四)->JSBridge的原理

说明 JSBridge实现原理 目录 前言 参考来源 前置技术要求 楔子 原理概述 简介 url scheme介绍 实现流程 实现思路 第一步:设计出一个Native与JS交互的全局桥对象 第二步:JS如何调用Native 第三步:Native如何得知api被调用 第四步:分析url-参数和回调的格式 第五步:Native如何调用JS 第六步:H5中api方法的注册以及格式 进一步完善JSBridge方案 思路 实现 注意 完整的JSBridge 完整调用流程图 另外实现:不采用url sche

Hybrid APP基础篇(二)->Native、Hybrid、React Native、Web App方案的分析比较

说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid App React Native App 分析 各大开发模式直观对比 如何选择开发模式 另类的app方案 微网页 微信小程序 其它 前言 参考来源 前人栽树,后台乘凉,本文参考了以下来源 对当前主流hybrid app.web app与native app工具的初步比较与分析 H5.React Nati

MYSQL 基础操作

1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样) insert into t3 select * from t1; --t1的数据全部拿过来,注意是表结构一致才select* ,否则选择相应的的字段列插入 create table t1( id int unsigned not null auto_increment primary key,

Android测试APP工具(一)

最近面试APP开发人员的时候,遇到了技术总监问 APP测试的概念性问题,后面感觉基本的项目流程.项目逻辑.屏幕适配. 测试是完全没有问题的,但是对于APP的性能测试.压力测试等高端的测试,还是存在着美中不足之处呀,毕竟是搞专业的APP开发 人员.但是,自己追求APP开发的流程是永不止境的,所以下定决心去了解深挖一下APP的测试,饿补一下APP的高端测试流程及其常 用工具.最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框 架.C

移动端混合型App(hybrid app)自动化测试选型与实践

背景 公司产品的业务已经发展到了移动端,开发选型已经结束,决定使用phonegap做移动端的web应用开发平台.考虑到业务的复杂与多样,移动端的测试同样需要自动化.在网上看了很多,最终锁定了3个移动端测试工具:Selendroid,Appium,Robotium.之所以选择他们3个,是因为团队已经有了以Selenium为基础的测试框架,而这三个工具与Selenium可以说一脉相承. 目标 基于phonegap的混合型app(hybrid app)web应用移动端自动化测试 选型过程 Selend