Appium之启动第一个App

搭建appium自动化环境真是各种问题呀。

如何启动在真机上启动App?

执行操作:操作Android真机上打开手机淘宝app,并搜索“熊猫”。

脚本源码如下:

from appium import webdriver
from time import sleep

desired_caps = {
    'autoLaunch': "True",
    'platformName': "Android",
    'deviceName': "VBJDU18509008035",
    'platformVersion': "10.0",
    'appPackage': "com.taobao.taobao",
    'appActivity': "com.taobao.tao.welcome.Welcome",
    'noReset': "True",          # 启动app时不要清除app里的原有的数据。
    "unicodeKeyboard": "True",  # 使用unicode编码方式发送字符串(以便键盘输入中文)
    "resetKeyboard": "True",    # 在运行具有unicodeKeyboard功能的Unicode测试之后,将键盘重置为其原始状态。若单独使用,则忽略。(后需手动进入系统修改回原键盘输入法)
}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
driver.find_element_by_xpath('//*[@resource-id="com.taobao.taobao:id/sv_search_view"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.view.View[2]').click()
sleep(5)    # 延迟,不然老报错未找到元素
driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys("熊猫")
driver.find_element_by_id("com.taobao.taobao:id/searchbtn").click()
# driver.find_element_by_xpath('//*[@resource-id="com.taobao.taobao:id/rv_main_container"]/android.widget.FrameLayout[4]/android.widget.FrameLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.FrameLayout[3]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]').click()
# driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("食品")').click()   # 使用text属性
# driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("宠物")').click() 

Desired Capabilities常用关键字详解:

Desired Capabilities 在启动 session 的时候是必须提供的。Desired Capabilities 本质上是以 key value 字典的方式存放,客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。

(官方文档地址:https://appium.io/docs/en/writing-running-appium/caps/#appium-desired-capabilities)

关键字 描述 实例
autoLaunch

是否需要自动安装或启动应用。默认为True

True或False
automationName 想使用的自动化测试引擎 Appium(默认)或Selendroid
platformName 移动设备的操作系统 iOS或Android或FirefoxOS
platformVersion 移动设备操作系统的版本号 如10.0
deviceName 移动设备类型或者模拟器类型 iPhone Simulator,iPad Simluator,Android Emulator等。(在Android上,这个关键字目前不起作用)
udid 连接的物理设备的唯一设备标识 如VBJDU415DG3
newCommandTimeout

设置命令超时时间,单位:秒,默认值为60

(如果达到超时时间且仍未接受到新的命令时,appium-server会假设客户端退出然后自动结束会话。)

如120
autoWebview

直接转换到Webview上下文。默认值 为False

True,False
noReset 不要要会话前清除应用状态。默认值为False True,False
fullReset

iOS:删除整个模拟器目录。

Android:通过卸载而不是清空数据来重置应用状态。

在Android上,这也会在会话结束后自动清除被测应用。默认值False。

True,False
browserName

启动手机浏览器

iOS:Safari

Android:Chrome,Browser

orientation 设置移动设备的方向模式为横屏或竖屏 LANDSCAPE (横向) 或 PORTRAIT (纵向)

前提:已安装Android_SDK、python、appium-server等环境。

1、在手机安装待测app,同时电脑上也储存有该待测app;

2、手机与电脑通过USB连接,并打开【开发人员选项】,打开【USB调试】:

对于华为手机,进入【关于手机】,连续点击【版本号】7次,则提示“手机已处于开发者模式”;再进入【系统和更新】,即可看到【开发人员选项】,进入即可打开【USB调试】。

 

3、确保手机与电脑连接,进入cmd命令行,执行命令:adb devices,得到设备信息如下:

由于我的手机与电脑连接后,一直获取不到设备信息,后再电脑上下载安装360手机助手,再执行adb devices就可以获取到设备信息了,神奇!

4、执行命令:aapt dump badging E:AndroidTestxxx.apk(APK的全名,如手机淘宝.apk),获取app的appPackage和appActivity信息:

 

5、打开appium-server:

由于使用AppiumForWindows_1_4_16_1一直报错"Could not parse activity from dumpsys ",后重新安装Appium-desktop作为appium-server(下载地址为https://github.com/appium/appium-desktop/releases)

 

6、定位需要的元素:

由于使用Android_SDK自带的uiautomatorviewer工具时老是报错“ Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!”,后改用了weditor。

即uiautomator2,是一个自动化测试开源工具,仅支持Android平台的原生应用测试。

GitHub地址:https://github.com/openatx/uiautomator2。

安装:pip install --pre weditor

在浏览器上运行:python -m weditor

 

ps:adb如何无线连接手机的方法?(手机和电脑已处在同一网络下)

(1)进行cmd命令行,手机通过USB线连接到电脑,且手机打开USB调试;

(2)执行命令 :adb devices,查看设备连接情况:

(3)执行命令:adb tcpip 5555,开启手机的5555端口(默认端口,也可以用其他端口):

(4)执行命令:adb  shell ip -f inet addr show  wlan0,查看手机的ip地址:

(5)执行命令:adb connect ip:port,无线连接设备:

(6)再次执行命令:adb devices,可以看到 通过ip连接的设备:

常见问题及解决参考

问题1:使用appium在Android真机上测试时报错“command failed shell 'ps' uiautomator”?

解决参考:https://blog.csdn.net/pjl6523853/article/details/72886048

 

问题2:Android真机,每次启动都会安装appiumsetting和unlock?

解决参考:https://www.cnblogs.com/syw20170419/p/8358523.html

问题3:运行uiautomatorviewer.bat闪退?

参考解决:降低jdk版本(如版本Java SE Development Kit 8u261)。

问题4:uiautomatorviewer工具定位网页元素时报错“Error obtaining UI hierarchy”?

解决参考:https://www.wandouip.com/t5i337805/

(ps:没有试过...,改用weditor了。)

问题5:执行脚本时“An unknown server-side error occurred while processing the command. Original error: The instrumentation process cannot be initialized.”?

解决参考:执行脚本前,先关闭weditor,包括cmd窗口、浏览器窗口和ATX软件(停止所有服务),再重启Appium-server。

 

参考:https://www.cnblogs.com/poloyy/p/12679388.html

参考:https://www.cnblogs.com/yoyoketang/tag/appium/default.html

原文地址:https://www.cnblogs.com/Maruying/p/13600456.html