Appium 利用 IPython 来学习 Appium

付海全 · 2017年02月09日 · 最后由 思寒_seveniruby 回复于 2017年03月19日 · 2703 次阅读
本帖已被设为精华帖!

Appium 简介

Appium是目前非常流行的移动端自动化测试工具,它是一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持 iOS, Android 和 FirefoxOS 平台。同时它也支持 python 语言来编写测试代码,下面就介绍一下怎么用 IPython Shell 来学习 Appium。

Appium 测试环境

Appium 环境搭建

首先是 Appium 的环境搭建,这部分请参考官网的文档,如果有问题可以上网搜索,能找到很多相关的教程。
完成搭建之后在终端中输入下面命令来检查环境是否正确。

$ appium-doctor

输出如下:

info AppiumDoctor Appium Doctor v.1.4.1
info AppiumDoctor ### Diagnostic starting ###
info AppiumDoctor  ✔ The Node.js binary was found at: /usr/bin/node
info AppiumDoctor  ✔ Node version is 6.3.1
--略--
info AppiumDoctor Everything looks good, bye!
info AppiumDoctor

Android 手机设置

准备一部 android 手机,我的使用的手机是 Nexus 4,系统版本是 5.1.1。
开启手机的开发者模式,然后设置充电时不锁定屏幕,这样测试时会方便一点。
通过数据线将手机和电脑相连接,在手机上选择允许 USB 调试。

最后在终端输入下面命令来检查设备是否链接正常:

$ adb devices

输出如下:

List of devices attached
04c5a5af52197902    device

Appium 服务启动

环境搭建好之后,通过下面命令来启动 appium 服务

$ appium -a 127.0.0.1 -p 4723  #启动服务,并且指定ip和端口

可以通过下面命令来查看具体的选项的说明和用法:

$ appium --help

利用 IPython 学习 Appium

第一个 appium 自动化 python 脚本

打开你最喜爱的文本编辑器(例如:vim),输入下面 python 代码,并保存为 appium_deom.py 文件。

#!/usr/bin/env python3
# coding=utf-8
from appium import webdriver

desired_caps = {}
desired_caps['platformName'] = 'Android' #设置操作平台
desired_caps['platformVersion'] = '5.1.1' #操作系统版本
desired_caps['deviceName'] = 'Nexus 4' #设备名称
# 设置要启动的应用的包名,可以通过UI automator Viewer工具查看
desired_caps['appPackage'] = 'com.android.calculator2' 
# 设置启动应用的首页信息,可以通过adb logcat抓取到
desired_caps['appActivity'] = '.Calculator'
desired_caps['udid'] = '04c5a5af52197902' #设备ID,可以通过adb devices命令查看
desired_caps['noReset'] = 'True' # 设置会话不会重置
desired_caps['unicodeKeyboard'] = 'True' #设置可以输入中文
desired_caps['resetKeyboard'] = 'True' #同上,设置中文输入
#设置python shell命令行的超时时间,默认是60秒
desired_caps['newCommandTimeout'] = 6000 
print(desired_caps) #打印配置信息

#使用上面的配置,新建driver对象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.implicitly_wait(10) #使用隐性等待10秒

注意:
newCommandTimeout 选项一定要设置的时间比较长,默认的 60 秒,如果在 ipython 中长时间不输入语句的话,很容易出现会话自动结束问题。
另外,上面代码中 “appPackage” 和 “appActivity” 必须设置,如果没有设置会提示错误信息。

IPython 的基本使用可以参考之前写的文章IPython 基本介绍
在终端中输入命令启动 ipython 并且运行脚本

$ ipython
Python 3.5.2+ (default, Nov  3 2016, 11:10:16) 
--略--
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
In [1]: %run appium_deom.py    #运行上面写好的脚本
{'appPackage': 'com.android.calculator2', 'platformName': 'Android', 
'resetKeyboard': 'True', 'unicodeKeyboard': 'True', 'udid': '04c5a5af52197902', 
'platformVersion': '5.1.1', 'noReset': 'True', 'newCommandTimeout': 6000,
 'deviceName': 'Nexus 4', 'appActivity': '.Calculator'}
In [2]: 

通过%run 命令运行脚本成功后,脚本中的变量和函数等可以直接在 ipython 中使用。

利用 ipython 探索 appium api

Tab 自动补齐

通过在 ipython shell 中输入 driver.后按 [Tab 键]。即利用 ipython 的自动补齐功能可以查看 driver 对象下有多少方法和属性。

输入图片说明

也可以输入部分关键词后自动补齐,补齐的方式和 bash shell 类似。例如输入 driver.find_element 后按 Tab 键:

输入图片说明

help() 函数查看帮助

还有可以利用 help 函数来查看 driver 对象中的函数的使用方法,命令示例:

In [3]: help(driver.get_screenshot_as_file)

输出如下:

Help on method get_screenshot_as_file in module selenium.webdriver.remote.webdriver:
get_screenshot_as_file(filename) method of appium.webdriver.webdriver.WebDriver instance
    Gets the screenshot of the current window. Returns False if there is
       any IOError, else returns True. Use full paths in your filename.
    :Args:
     - filename: The full path you wish to save your screenshot to.
    :Usage:
        driver.get_screenshot_as_file('/Screenshots/foo.png')

在 ipython 中执行 python 语句

现在可以在 ipython 中一条一条的执行 python 代码,可以马上在手机上看到效果,例如执行元素定位并点击操作的语句:

In [9]: driver.find_element_by_id('com.android.calculator2:id/digit_7').click()  #找到按钮“7”并点击

如果没有问题的话,你马上就可以在手机上看到 appium 的执行效果。
通过这种方法,你可以进行实验,或者试错法。也可以通过粘贴网上的代码到 ipython 中运行,可以马上查看运行结果。

最后,执行下面语句来退出 driver,结束本次测试。

In [10]: driver.quit()

小结

利用 ipython 不需要编写完整的脚本后再运行和调试,可以直接单条语句运行和调试,这样就为我们节省了不少时间。个人认为学习 IT 方面的知识,多动手实践是非常好的学习方式。而 ipython 正好能帮助我们快速方便的探索和实验 appium 的使用方法。

共收到 5 条回复 时间 点赞

好详细,支持一下

好东西,学习一下

思寒_seveniruby 将本帖设为了精华贴 02月09日 18:22

加精理由: 动手能力不错, 有探索精神

#4 楼 @seveniruby 谢谢,支持😀

王华林 Macaca 脚本调试思路 (原理、源码 - Python) 中提及了此贴 03月09日 09:11

请更新二维码,你已经错过本轮的社区统一打赏

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册