python appiumdesktop 成功运行一个例子。打开微信(二)

环境: windows7-64  python3.6.1  appium-desktop1.9.1  华为mate10

进入第二篇,我们要操作手机app自动化,第一步就是要能打开某个app。本篇选择腾讯的微信app作测试。

选择appium-desktop 是因为它是appium的图形界面版,内置Nodejs,安装过程不用任何配置,且支持android9.0

本篇使用到的环境安装,请看上篇。

跟着下面步骤:

1  手机与PC正常连接

    手机USB连接电脑时,确保关闭360、或第三方手机助手软件。 有些手机品牌内置手机助手,如华为手机助手。首次插入USB,提示安装,安装即可。

    手机插入后USB连接方式默认是仅充电。如果电脑开启了自动播放,会弹出后续操作选项。选择【打开设备以查看文件】就可以了。或者直接关闭自动播放功能,相关设置可以在【控制面板-硬件和声音-自动播放】设置,如图

python appiumdesktop 成功运行一个例子。打开微信(二)_第1张图片

手机USB连接方式,选择【传输文件】,会看到电脑右下角USB连接标志会出现加载驱动提示,待驱动加载完毕。手机与PC端的连接就成功了。可以在设备管理器里查看

python appiumdesktop 成功运行一个例子。打开微信(二)_第2张图片

2 adb devices 成功出现手机连接信息

    现在我们在dos命令窗口,打命令 adb devices 看下会出现什么?

python appiumdesktop 成功运行一个例子。打开微信(二)_第3张图片

提示:doesn't math this client,could not read ok from adb server .    cannot connect to daemon.

出现这个错误,是因为adb被占用了。

在USB插入前第三方手机助手都关闭了,难道是华为手机助手问题? 

解决方法:退出华为手机助手,在任务管理器关闭所有adb进程,关闭360手机助手(由于360主动防护服务,即使关闭360安全卫士360的手机助手还是会启动,这个是报错主因)

再来adb devices

可以看到,adb 命令成功执行,但是还是没找到手机设备

解决方法:

     手机打开USB调试。

   【设置 - 系统 - 关于手机】在版本号处连续点击,待出现提示开启开发者模式后返回。然后进入开发人员选项。

     开启USB调试, 由于手机正在USB连接,会弹出如下图所示提示,这里勾选始终,然后确定。

python appiumdesktop 成功运行一个例子。打开微信(二)_第4张图片

然后下拉屏幕,在【选择USB配置】处选择【MTP(多媒体传输)】

python appiumdesktop 成功运行一个例子。打开微信(二)_第5张图片

我们再来试试命令,adb devices (此处应重新打开DOS窗口)

至此 adb 连接测试手机成功。

3 手机USB有线连接,变无线连接

手机通过USB连接PC,感觉好麻烦。有没简单的方法去解放数据线?

答案是有的。我们现在手机是通过USB连着电脑的,adb devices 也已成功显示手机设备。

可通过简单的命令,去实现有线转无线连接,前提是手机与PC处于同一个WIFI网络上,并已知道手机的局域网IP地址

首先设置一个容易记的adb连接端口号,并记下来   adb tcpip 5555

然后使用命令就可以连接上手机了    adb connect ip:5555

python appiumdesktop 成功运行一个例子。打开微信(二)_第6张图片

现在可以拔下USB数据线了。

注意:可能由于安卓版本问题,拔下数据线后,USB调试会自动关闭,这样WIFI连接就会处于offline,若出现这种状态,在手机开发者选项里找到 “仅充电”模式下开启adb调试并勾选上,再重新操作一遍。

adb连接可能会遇到各种各样的问题,无非两种方向

1、adb server 被占用,端口5037被占用。

2、 USB调试没打开,或打开后自动关闭,手机USB连接配置错误。

当然,也有可能会遇到adb版本不兼容问题,具体情况具体分析

4 打开appium-desktop。配置参数并成功启动微信

python appiumdesktop 成功运行一个例子。打开微信(二)_第7张图片

打开,直接 start server  。这样就启动了以4723为服务端口的appium-server

python appiumdesktop 成功运行一个例子。打开微信(二)_第8张图片

如上图,点击这个按钮

在弹出界面中,主要是设置相关参数

python appiumdesktop 成功运行一个例子。打开微信(二)_第9张图片

如下图,是我的设置参数

{
  "platformName": "Android",
  "platformVersion": "9",
  "deviceName": "192.168.1.100:5555",
  "appPackage": "com.tencent.mm",
  "appActivity": "com.tencent.mm.ui.LauncherUI",
  "noReset": true,
  "automationName": "Appium",
  "newCommandTimeout": "240",
  "unicodeKeyboard": true,
  "resetKeyboard": true
}

具体参数函义,自已百度下更清楚,这里着重介绍有两点

1 noReset 需要设置为True,如果没设置,你的微信就相当于重新安装,首次调试时把我坑了。

2 platformversion 是手机的安卓版本,首次设置时我用 9.0  9.0.1 都是错误的,搞了很久才得到 9 这个正确值。

参数设置完后,就可以点击界面右下角的 【start session】

appium,会尝试连接你的手机,并在你手机上安装若干个app,若参数设置正确 稍等片刻后就会成功启动微信。

注意:start session 是会有很多问题出现的地方,在start 前要保证PC端与手机是处于正确的连接状态

用 adb devices 查看连接状态

至此,你已经成功了。没错配置成功了。最后一步就是用python写脚本了。

5 用python 打开手机微信

首先 pip 安装 Appium-Python-Client。  命令为  pip install Appium-Python-Client

打开python IDE, 这里是用 pycharm

新建项目-新建py文件。 导入appium模块, 相关源码,如图。

# coding=utf-8
from appium import webdriver
import time

def dc_option():
    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '9'
    desired_caps['deviceName'] = '192.168.1.100:5555'
    desired_caps['newCommandTimeout'] = 240    #设置元素定位延时
    desired_caps['noSign'] = True  #避免重签名,未安装指定app 有用,已安装的没用
    desired_caps['noReset'] = True  #不重置app状态
    desired_caps['unicodeKeyboard'] = 'True'
    desired_caps['resetKeyboard'] = 'True'
    desired_caps['automationName'] = 'Appium'
    desired_caps['appPackage'] = 'com.tencent.mm'
    desired_caps['appActivity'] = 'com.tencent.mm.ui.LauncherUI'
    return desired_caps

if __name__ == "__main__":
    driver = webdriver.Remote('http://localhost:4723/wd/hub', dc_option())

    time.sleep(10)           # 暂停十秒后退出
    #退出前 切换手机输入法为原生输入法
    driver.activate_ime_engine(driver.available_ime_engines[0]) 
    driver.quit()

为了sendkey 时能输入中文,手机是需要安装支持Unicode的输入法。脚本退出时恢复原生输入法。

在appium 【start session】成功后会出现UIView界面,那是用来进行手机元素定位的,手机操作跳转后,通过刷新来重新获取手机界面。得到元素后,就可以用python写具体的操作脚本了。

原以为很解决的描述,不知不觉写了很长很长。也忽略了一些无关的小细节。

你可能感兴趣的:(python)