1、主要目的:
-上手 appium 工具使用
-appium 思想执行流程
-appium 调试技巧:app 太不稳定了
-非常核心基础:元素定位
2、安装 app 自动化测试的环境
- appium 服务: 相当于 selenium 的 webdriver, 最新的,最稳定的。
- Appium-Python-Client : 相当于 pip install selenium
caps信息:
http://appium.io/docs/en/writing-running-appium/caps/
#appium首页进入
1、[Appium] Welcome to Appium v1.13.0
# appium连接成功
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
日志信息:http的请求方式 #请求方式:post 域名:/wd/hub/session
2、[HTTP] --> POST /wd/hub/session
日志记录信息:
# 链接的设备信息;版本号 设备名称;端口号 apk的包名 或者appActivty:通过appt
查找 aapt dump badging /path/to/apk.apk
[HTTP] {"capabilities":{"firstMatch":[{"platformName":"Android","appium:platformVersion":"8.0","appium:deviceName":"emulator-5554","appium:appPackage":"com.lemon.lemonban","appium:appActivity":"com.lemon.lemonban.activity.WelcomeActivity"}]},"desiredCapabilities":{"platformName":"Android","platformVersion":"8.0","deviceName":"emulator-5554","appPackage":"com.lemon.lemonban","appActivity":"com.lemon.lemonban.activity.WelcomeActivity"}}
[W3C] Calling AppiumDriver.createSession() with args:
是 python 代码访问了 appium 服务提供的 /wd/hub/session 这个接口, 开启一个会话
3、w3c 校验
4、appium接收参数
5、appium 服务启动了 adb 程序,获取电脑上的手机设备, 如果参数不通过,就返回给客户端。
6、[ADB] Running 'D:\adt-bundle-windows-x86_64-20140702\sdk\platform-tools\adb.exe -P 5037 -s emulator-5554 shell am start -W -n com.lemon.lemonban/com.lemon.lemonban.activity.WelcomeActivity -S'
手动通过 adb 启动 app
adb shell : 进入手机的shell
android 是一个 linux 系统的发行版。 deepin, ubuntu, centos
安卓当中的 text 和 html 当中的 text:
- html text 不是元素属性。 //*[text()='']
- app text 是元素属性 //*[@text='']
class 和 html 当中有什么问题:
- html, class 主要用来排版
- 安卓当中, 元素的标签名: vs tag_name
content-desc :: 无障碍描述
resource-id: id
from appium.webdriver import Remote # 得到一个driver # 1、TODO: adb devices 确定手机在线 # 2、启动 appium 服务 # 如果appium启动了 4444 端口,就可以直接访问:因为Remote 设置了默认参数。 # Remote 提供的参数端口号和 appium 服务端口号保持一致 # 平台, 你要链接哪个手机, 操作哪个app # 三个变量 key 不能变的。 # caps = { # 'platformName': 'Android', # 'deviceName': 'emulator-5554', # 'app': r'D:\data\柠檬班环境\app测试环境\应用apk包\lemon_app_webview_debug.apk' # } # # driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub', # desired_capabilities=caps) # 可以不提供 app 路径,而是提供 app 的包名 和 activity # 包名: # activity: app当中的哪个页面。 from selenium.webdriver.common.by import By caps = { 'platformName': 'Android', # 校验系统版本 # 'platformVersion': '8.0', # 'automationName': 'Uiautomator2', 'deviceName': 'emulator-5554', 'appPackage': 'com.lemon.lemonban', 'appActivity': 'com.lemon.lemonban.activity.WelcomeActivity', # 'app': r'D:\data\柠檬班环境\app测试环境\应用apk包\Future-release-2018.apk', # 会使用缓存数据 # 'noReset': False, # 'chromedriverExecutable': r'd:\' # - unicodeKeyboard: True # - resetKeyboard: True # autoGrantPermissions: True } driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities=caps) # 等待 driver.implicitly_wait(10) # 找元素 driver.find_element(By.ID, 'com.lemon.lemonban:id/navigation_my').click() driver.quit()