Android UI自动化实例
福利来了!!
文章开头介绍大家一个自动化的录制工具:Appium Studio
支持Android和iOS的应用UI自动化脚本录制,可以支持Java、C#、Python和Ruby四种语言的脚本导出。
一、脚本录制
1.1 连接设备
1.2 启动录制
(1)录制测试App;
(2)录制结束后回放脚本;
(3)检查测试步骤
(4)保存测试脚本
(5)优化脚本
脚本展示
import unittest
import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
class Untitled(unittest.TestCase):
reportDirectory = 'reports'
reportFormat = 'xml'
dc = {}
testName = 'Untitled'
driver = None
def setUp(self):
self.dc['reportDirectory'] = self.reportDirectory
self.dc['reportFormat'] = self.reportFormat
self.dc['testName'] = self.testName
self.dc['udid'] = '0123456789ABCDEF'
self.dc['platformName'] = 'android'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub',self.dc)
def testUntitled(self):
self.driver.find_element_by_xpath("xpath=//*[@text='计算器']").click()
self.driver.find_element_by_xpath("xpath=//*[@id='clear' and @width>0]").click()
WebDriverWait(self.driver, 30).until(expected_conditions.presence_of_element_located((By.XPATH,'//*[@id='digit1' and @width>0]')))
self.driver.find_element_by_xpath("xpath=//*[@id='digit1' and @width>0]").click()
self.driver.find_element_by_xpath("xpath=//*[@id='plus' and @width>0]").click()
self.driver.find_element_by_xpath("xpath=//*[@id='digit1' and @width>0]").click()
self.driver.find_element_by_xpath("xpath=//*[@id='equal' and @width>0]").click()
self.driver.find_element_by_xpath("xpath=//*[@id='digit2' and @width>0]").click()
self.driver.find_element_by_xpath("xpath=//*[@class='android.widget.EditText']").click()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
二、手写脚本
2.1 使用UIa Automator Viewer抓取元素
2.2 编写脚本,增加结果断言
# coding=utf-8
__author__ = 'king'
import unittest
from appium import webdriver
class Untitled(unittest.TestCase):
def setUp(self):
self.dc['udid'] = '0123456789ABCDEF'
self.dc['deviceName'] = '1503-M02'
self.dc['platformName'] = 'android'
self.dc['appPackage'] = 'com.android.calculator2'
self.dc['appActivity'] = '.Calculator'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.dc)
def testUntitled(self):
# 清除
self.driver.find_element_by_id("com.android.calculator2:id/clear").click()
# 1+1=
self.driver.find_element_by_id("com.android.calculator2:id/digit1").click()
self.driver.find_element_by_id("com.android.calculator2:id/plus").click()
self.driver.find_element_by_id("com.android.calculator2:id/digit1").click()
self.driver.find_element_by_id("com.android.calculator2:id/equal").click()
value = self.driver.find_elements_by_class_name("android.widget.EditText")[0].get_attribute("text")
# 断言
self.assertEqual('1+1\n=2', value, msg=None)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
三、总结
- Appium Studio 目前不支持手动修改脚本,也没断言机制,工具比较简陋,适合新手玩玩就好了,录制的脚本元素只适合工具自用
- 自动化的用例必须加断言,使得用例具有意义,建议手动编写高可用的脚本