一、Appium简介
Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。 通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。它是通过驱动苹果的UIAutomation和Android的UiAutomator框架来实现的双平台支持,同时绑定了Selenium WebDriver用于老的Android平台测试。开发者可以使用WebDriver兼容的任何语言编写测试脚本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl语言。
二、 环境搭建
安卓
所需软件/工具
jdk1.8.0_101
node-v7.10.0-x64
pycharm-professional-2017.1.4
python_3.6.0
appium-installer
android-sdk-windows
Appium Client
环境搭建网址参考:
ios
所需软件/工具
Xcode
jdk1.8.0
appium 3.6
appium-doctor
Homebrew(用于安装node)
node
pycharm-professiona2017.1.4
python_3.6.0
libimobiledevice
ios-deploy
WebDriverAgent
macaca-cli
环境搭建网址参考:
三、基础文件配置
设置基础文件,配置自动化测试的测试机信息
安卓设备配置信息
desired_caps['newCommandTimeout'] = 3600 # 1 hour
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
desired_caps['device'] = 'android'
desired_caps['platformName'] = 'Android' #平台
desired_caps['version'] = '5.1.1' #安卓系统版本desired_caps['deviceName'] = 'vivo X7'# 这是测试机的型号,可以查看手机的关于本机选项获得
desired_caps['noReset'] = True #不需要重新安装,调试用
desired_caps['app'] = android_pkg #被测试的App在电脑上的位置
其中unicodeKeyboard、resetKeyboard为是否切换为Appium输入法
Ios设备配置信息
desired_caps['automationName'] = 'XCUITest' # Xcode8.2以上无UIAutomation,需使用XCUITest
desired_caps['platformName'] = 'iOS'
desired_caps['platformVersion'] = '10.0'
desired_caps['deviceName'] = 'iPhone 7'
desired_caps['udid'] = '8de***********' #设备编号,真机运行必须填写udid
desired_caps['bundleId'] = 'com.*********' #被测应用包名
desired_caps['newCommandTimeout'] = 3600 # 1 hour
desired_caps['xcodeOrgId'] = '*******' #开发者账号
desired_caps['xcodeSigningId'] = 'iPhone Developer'
desired_caps['app'] = ios_pkg # 被测试的App在电脑上的位置
后期为便于安卓与ios共用一套代码,已减少代码重复量 在编写代码时可对平台进行判断
sysstr = platform.system()
isAndroid = True if sysstr == "Windows" else False
判断平台可用if else判断
如代码相同,可正常编写,当因平台差异或其他原因导致代码不同时可用
举个例子,相同模块Android的点击按钮,添加了id 而ios无id,但其他脚本都相同,可在两平台不同处,对判断platform区分,安卓根据id进行查找,而ios可根据name进行查找
if isAndroid:
self.driver.find_element_by_id("ll_add_contact").click() # 选择联系人按钮else:
self.driver.find_element_by_name("选择联系人").click()
四、自动启动app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
其中http://127.0.0.1:4723/wd/hub为appium中配置
五、元素查找及断言
1、在UI自动化中,元素查找的方法较多,通常可使用 id,name,xpath等
举个例子:
使用id的点击事件
self.driver.find_element_by_id("tv_*****").click()
使用name的点击事件
self.driver.find_element_by_name("发现").click()
使用xpath的点击事件
self.driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[3]/android.widget.TextView[1]").click()
其中的find_element也可使用find_elements,find_element为定位单个元素使用,find_elements为定位列表元素(多个元素)使用
2、断言使用方式也较多,在这里不过多介绍,详细请参考
举个例子:
判断跳转页面中的某个id对应的文本是否为“朋友圈”
self.assertEqual(self.driver.find_element_by_id("tv_circleoffriends").text,"朋友圈",msg="页面切换成功") #断言是否相等