Windows - Appium+Python:Android自动化测试

1.测试环境搭建

1.1安装appium前的准备

安装python3.5、jre8、node.js 6、android-sdk、.net Framework4.6.1,并配置系统环境变量。

系统环境变量:

1.1.1 python3.5

path: D:\Program Files\python;D:\Program Files\python\Scripts;D:\Program Files\python\lib\site-packages\pytz-2017.2-py3.5.egg;

1.1.2 jre8

JAVA_HOME:D:\Program Files\Java\jdk1.8.0_101

path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

1.1.3 node.js

path:D:\Program Files\nodejs\;

1.1.4 android-sdk

ANDROID_HOME:D:\Program Files\Android\android-sdk

path:%ANDROID_HOME%\tools;%ANDROID_HOME%\build-tools\26.0.1;%ANDROID_HOME%\platform-tools;

1.2安装appium

1.2.1 安装appium客户端

下载并安装appium客户端,环境变量配置如下:

Appium_Home:D:\Program Files\Appium

path:%Appium_Home%;%Appium_Home%\node_modules\.bin;

使用pip安装Appium-Python-Client:pip install Appium-Python-Client

1.2.2 使用npm安装

使用npm安装appium,方法为:npm install appium

使用pip安装Appium-Python-Client:pip install Appium-Python-Client

1.3检验是否安装成功

1.3.1 检验appium客户端是否安装成功

启动appium客户端, 

window+R+cmd-> appium,出现以下提示,则证明安装成功。

Running Android Checks
✔ ANDROID_HOME is set to "D:\Program Files\Android\android-sdk"
✔ JAVA_HOME is set to "D:\Program Files\Java\jdk1.8.0_101."
✔ ADB exists at D:\Program Files\Android\android-sdk\platform-tools\adb.exe
✔ Android exists at D:\Program Files\Android\android-sdk\tools\android.bat
✔ Emulator exists at D:\Program Files\Android\android-sdk\tools\emulator.exe
✔ Android Checks were successful.


✔ All Checks were successful

反之,则需要根据出现的错误提示进行修改,直到出现以上提示为止。

1.3.2 检验使用npm安装的appium是否安装成功

window+R+cmd-> appium,出现以下提示,则证明安装成功。

[Appium] Welcome to Appium v1.7.0
[Appium] Appium REST http interface listener started on 0.0.0.0:4723

反之,则需要根据出现的错误提示进行修改,直到出现以上提示为止。

1.3.3 常见问题

常见问题:端口被占用,解决办法

①window+R+cmd 调出命令窗口。

②输入命令:netstat -ano,列出所有端口的情况。

③查看被占用端口对应的PID,输入命令:netstat -aon|findstr "端口号",回车,记下最后一位数字,即PID

④输入tasklist|findstr "PID",回车,查看是哪个进程或者程序占用了端口

⑤输入taskkill /f /t /im 进程/程序,回车,结束进程

[④⑤亦可替换成 直接操作任务管理器,根据PID结束进程]

2.实例

2.1 连接手机,启动、退出APP

(1)启动appium:点击按钮启动客户端或者window+R+cmd-> appium。

(2)调用代码中所示的Appium_Contect类,get_driver启动、quit_driver退出。

# -*- coding:utf-8 -*-

from appium import webdriver

class Appium_Contect:
    def __init__(self,reset):
        self.desired_caps = {'platformName': 'Android',
                        'deviceName': 'emulator-5554',
			'app':'要安装的App路径',#
                        'appPackage': '被测的App包名',
                        'appActivity': '启动时的Activity',
                        'noReset': reset,#是否重置,清除数据。true不重置,false重置
                        "unicodeKeyboard":True,
                        "resetKeyboard":True}
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)

    def get_driver(self):
        return self.driver

    def quit_driver(self):
        self.driver.quit()

if __name__=='__main__':
    ac=Appium_Contect(True)
    ac.get_driver()
    ac.quit_driver()

2.2 基于UI的自动化操作
2.3.1 获取控件
通过uiautomatorviewer(D:\Program Files\Android\android-sdk\tools\uiautomatorviewer.bat)可以获取到ID、class、Text等。

appium为了实现自己的find查找方式,首先自定义了一个MobileBy类,给这个类对象塞入了它定义的一些扩展属性,这些属性的值会通过webdriver协议推送到server端去识别和执行,为了让这些属性运用到find方法中,appium很好地继承和扩展了webdriver.Remote,然后通过调用driver实例的find_element和find_elements两个核心方法实现元素查找,所以,既然是扩展,appiumdriver实例可以使用seleniumdriver的所有关于元素查找的实例方法,如下:

seleniumdriver
find_element_by_id  find_elements_by_id
find_element_by_name  find_elements_by_name
find_element_by_link_text  find_elements_by_link_text
find_element_by_partial_link_text  find_elements_by_partial_link_text
find_element_by_tag_name  find_elements_by_tag_name
find_element_by_xpath  find_elements_by_xpath
find_element_by_class_name  find_elements_by_class_name
find_element_by_css_selector  find_elements_by_css_selector

appiumdriver
find_element_by_ios_uiautomation  find_elements_by_ios_uiautomation
find_element_by_android_uiautomator  find_elements_by_android_uiautomator
find_element_by_accessibility_id  find_elements_by_accessibility_id

调用这些实例方法实现起来类似于:

self.driver.find_element_by_id(recourceId)
self.driver.find_elements_by_id(recourceId)
self.driver.find_element_by_xpath(xpath)
self.driver.find_elements_by_xpath(xpath)

2.3.2 常用事件
(1)是否存在
len(self.driver.find_elements_by_id(recourceId))==0
(2)点击
self.driver.find_elements_by_id(recourceId).click()
(3)滑动
self.driver.swipe(x1, y1, x2, y2, 500)#从起始点(x1,y1)滑动到(x2,y2)
(4)长按
action = TouchAction(self.driver)
el = self.driver.find_element_by_id("com.easemob.businesslink:id/btn_press_to_speak")
action.long_press(el=el,duration=2000).wait(1000).perform()[等待1000ms后长按2000ms]
(5)设置文本
self.driver.find_elements_by_id(recourceId).send_keys("123456")

[待补充......]

3.总结

基于Appium和Python目前我只使用了以上简单的自动化操作,日后再使用到,会进行补充。
Appium功能强大,有待深入研究。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值