八、UI自动化移动端

UI自动化APP

环境介绍

  • 模拟器
    • 模拟真机和android操作系统
  • adb
    • 谷歌公司提供的安卓系统调试工具
  • appium
  • Appium-Python-Client
    • 在python中的一个包, 作用是通过python代表编写自动化测试脚本

image

adb常用命令

adb devices

  • 显示或者连接到android系统
adb devices
* daemon not running; starting Now at tcp:5037
* daemon started successfully
List of devices attached
emulator-5554   offline      
# 检测到了一个设备, offline离线(设备存在, 但并没有连接到adb), 
# 解决办法, 再次运行adb devices
List of devices attached
emulator-5554   device  
# 显示device,代表连接设备成功

获取app的包名和界面名

  • 每个app都有一个包名
  • 一个app中不同的界面都有自己的界面名
  • 在移动端自动化测试中, 如果要测试一个app,那么就一定要知道这个app的包名和界面名
adb shell dumpsys window windows | findstr mFocusedApp
  • 查看tpshopApp的包名和界面名
第一步: 在安卓中启动app
第二步: 在windows的cmd中执行如下命令:
adb shell dumpsys window windows | findstr mFocusedApp
mFocusedApp=AppWindowToken{5c9352d token=Token{c2ef044 ActivityRecord{aaedd57 u0 com.tpshop.malls/.SPMainActivity t5
  • 包名com.tpshop.malls
  • 界面名.SPMainActivity

安卓文件与windows的同步

adb pull

  • 把安卓中的文件, 下载的windows
adb pull 安卓的文件路径文件名 windows的文件存放路径
adb pull /default.prop c:\file
# 把安卓根目录下的文件default.prop, 下载到windows的c盘file目录里
adb pull /lib/libz.so c:\file
# 把安卓根目录的lib目录下的文件libz.so, 下载到windows的c盘file目录里

adb push

adb push windows的文件路径 安卓的文件位置
adb push c:\file\a.txt /sdcard
# 把windos上的c盘file目录下的a.txt上传到安卓的根目录的sdcard里

adb启动指定的app

adb shell am start -W 包名/界面名
adb shell am start -W com.tpshop.malls/.SPMainActivity # 启动tpshop
Status: ok
Activity: com.tpshop.malls/.SPMainActivity
ThisTime: 3662    # 界面启动需要的时间
TotalTime: 3662   # 包启动需要的时间
WaitTime: 3786    # 安卓为启动app需要的时间
Complete  # 完成

查看安卓系统日志

  • adb logcat

adb安装和卸载app

  • adb install apk文件所在的路径
adb install c:\file\tn3180.apk  # 安装c盘file目录里的tn3180.apk这个安装文件
  • adb uninstall 包名
adb uninstall com.tencent.news  # 把包com.tencent.news卸载

重启adb服务

  • adb kill-server 关闭服务
  • adb start-server 启动服务
adb后台有个服务进程, 有时候这个进程会工作出问题, 通过以上两个命令, 可以重启adb的服务

查看adb帮助

  • adb --help

基础操作

入门代码

from appium import webdriver
import time


dict1 = {"platformName":"Android",
         "platformVersion":"7.1",
         "deviceName":"127.0.0.1:5555", # 随便填一个值, 但不能空
         "unicodeKeyboard":True, # 中文支持
        "resetKeyboard":True, # 中文支持
         "appPackage":"com.android.settings", # 启动的包名
         "appActivity":".Settings" # 界面名
         }
driver = webdriver.Remote("http://localhost:4723/wd/hub", dict1)
driver.find_element_by_id("dashboard_tile").click()
time.sleep(5)
driver.quit()

启动指定包和界面

  • driver.start_activity(包名, 界面名)
# 打开通讯录
driver.start_activity("com.android.contacts", ".activities.PeopleActivity")

获取包名和界面名

  • driver.current_package # 包名
  • driver.current_activity # 界面名
print(driver.current_package)
print(driver.current_activity)

关闭驱动和app

  • 关闭app后驱动对象还可以继续控制
driver.close_app()

安装和卸载app

  • 判断是否安装指定app
    • driver.is_app_installed("包名")
  • 安装app
    • driver.install_app(r"apk文件路径")
  • 卸载app
    • driver.remove_app("包名")
if driver.is_app_installed("com.tencent.news"): 
    driver.remove_app("com.tencent.news") # 如果已经安装腾讯新闻, 卸载
else:
    driver.install_app(r"C:\app\TencentNews_3180.apk") # 如果没有安装腾讯新闻, 安装

应用置于后台

  • driver.background_app(秒数)
driver.background_app(3)

定位元素

定位单个元素

  • id定位
    • driver.find_element_by_id(resource-id属性值)
  • class定位
    • driver.find_element_by_class_name(class属性值)
  • name定位
    • driver.find_element_by_accessibility_id(content-desc属性)
  • 当定位到多个符合条件的元素时,认返回第一个

定位多个元素

  • 定位一组元素时, 返回数据类型为列表
# 1.点击系统设置中的WLAN
# 2.点击WLAN中的开关按钮
from appium import webdriver
import time
dict1 = {"platformName":"Android",
         "platformVersion":"7.1",
         "deviceName":"127.0.0.1:5555", # 随便填一个值, 但不能空
         "unicodeKeyboard":True, # 中文支持
        "resetKeyboard":True, # 中文支持
         "appPackage":"com.android.settings",
         "appActivity":".Settings"}
driver = webdriver.Remote("http://localhost:4723/wd/hub", dict1)
driver.find_element_by_id("dashboard_tile").click()
time.sleep(2)
driver.find_element_by_id("switch_widget").click() # 点击WLAN开关
# 如果有多个id为"dashboard_tile"的元素, 点击第二个
# driver.find_elements_by_id("dashboard_tile")[1].click()
time.sleep(5)
driver.quit()

总结

image

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...