在尝试多天的Monkey之后,发现不能从根源上解决当前的需求,故开启Appium小白之路。
代码如下:
#coding:utf-8
import os
from appium import webdriver
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4'
desired_caps['deviceName'] = '连接的真机名'#
desired_caps['app'] = PATH('./app/v2.0.0.apk')
desired_caps['appPackage'] = 'package'
desired_caps['appActivity'] = package+启动activity'
desired_caps['noSign'] = True # 跳过检查签名,只做UI测试
desired_caps['unicodeKeyboard'] = True # 使用Unicode编码方式发送字符串
desired_caps['resetKeyboard'] = True # 隐藏系统键盘
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.implicitly_wait(5)
driver.quit()
问题一:如何获取真机的UDID?
-
通过adb devices, 图中的3e3e9ae9 是连接手机的唯一设备识别符。
结果.png
问题二:appPAth为何是./app下?
-
目录结构如下图,此目录结构暂时如此,可以根据自身需要进行调整,所以apk均被放到了app目录下。
目录结构.png
问题三:appPackage的获取?
- 通过 aapt dump badging v2.0.0.apk
结果示意图.png
问题四:appActivity如何获取?
-
通过AndroidManifest.xml文件中的intent-filte里面的android.intent.category.LAUNCHER查找,因为LAUNCHER这一项是是唯一的;然只找到这个activity是不够的,还需要xml顶部的package名字。格式参考:com.xxx.xxx.activity.xxxx。
xml样例截图.png
xml样例头的包名位置.png
问题五:webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)的作用?
-
作用:启动app。
ip地址和端口号需要和Appium客户端的Server Address 保持一致。
Appium客户端链接的服务器地址.png -
总结:
主要在第四步的时候耽误的时间比较久,网上搜索答案时,只说是启动app,后来咨询了开发小伙伴,才知道要按照包名+启动activity的结果
因为实际一个手机上会有多个app,但是可能某几个app的启动项的activity名是相同的,加上包名是为了进行区分,因为包名是唯一的。
网友评论