Android自动化教程实战:Appium+Python (对应的连接地址:https://www.jianshu.com/p/8b06f76be7e6)

本文不在叙述Appium环境安装。若有须要请参考:http://www.jianshu.com/p/7a6fa7ab662bjavascript

1. 建立项目目录

mkdir project{conf,common,logs,doc,tests}

#conf:存放appium-android配置设置,以及App页面元素配置文件; #logs:存放日志以及截图; #doc:存放文档; #common:存放工具类的脚本; #tests:存放测试脚本; 

整个目录以下:css

 
Paste_Image.png

2. Appium Android配置文件

Appium Android Settings 设置以下:java


 
Paste_Image.png

Python脚本配置以下:python

#!/usr/bin/env python # -*- coding:utf-8 -*- import os import sys import time import re from appium import webdriver sys.path.append("..") #用于解决多个手机链接问题 from common.mobile import get_serialno #Read mobile deviceId device_id = get_serialno() #Read mobile os Version os_version = os.popen('adb -s {0} shell getprop ro.build.version.release'.format(device_id)).read() def appium_start(): config = { 'platformName':'Android', #平台 'platformVersion':os_version, #系统版本 'deviceName':device_id, #测试设备ID # 'appPackage':'com.jiuai', # 'appActivity':'.activity.MainActivity', 'app':'/Users/xiaohutu/GitHub/Android-Test/com.jiuai.apk', #apk路径 #'app':'D:\com.jiuai.apk', 'newCommandTimeout':30, 'automationName': 'Appium', 'unicodeKeyboard':True, #编码,可解决中文输入问题 'resetKeyboard':True} return webdriver.Remote('http://localhost:4723/wd/hub', config) 

上述脚本保存为:appium_config.pyandroid

备注:git

from common.mobile import get_serialno 用于解决多个手机链接问题。具体脚本见:https://github.com/yi-heng/Android-Test/blob/master/Template/common/mobile.py 

3. Android元素定位

uiautomatorviewer是Android SDK自带的工具,在$ANDROID_HOME/tools目录下,可以使用此工具查看页面元素。
使用的测试app为本公司的开发的:旧爱,以下:github

 
Paste_Image.png
driver.find_element_by_id(resource-id).click() 

建议:将全部的页面元素集中到一个文件,提升Appium脚本的复用性、可配置性,如命名为config.ini或el.ini
见另外教程:http://www.jianshu.com/p/980a82cde7dfweb

4. 测试脚本编写

4.1 导入相关库
import unittest #Python单元测试框架 from configparser import ConfigParser #读取配置库 from selenium import webdriver #导入selenium库 from appium import webdriver #导入appium库 
4.2 导入appium启动脚本
from conf.appium_config import appium_start 
4.3 使用Unittest编写测试脚本主体
class ProductInformation(unittest.TestCase): """ TestCase: xxxxx Description: xxxxx """ #@classmethod,在此类中只进行一次初始化和清理工做  @classmethod def setUpClass(self): self.driver = appium_config.appium_start() def test_initial(self): pass  @classmethod def tearDownClass(self): self.driver.quit() 
4.4 编写测试用例
def test_initial(self): driver.find_element_by_id(resource-id).click() driver.find_element_by_id(resource-id).send_keys(u'测试数据') 
4.5 组织运行测试用例
# texture Testcase def suite(): tests = [ "test_initial", ] return unittest.TestSuite(map(ProductInformation,tests)) if __name__ == "__main__": unittest.TextTestRunner(verbosity=2).run(suite()) 
相关文章
相关标签/搜索