阿里云测平台|阿里云测平台 Appium iOS移动自动化

阿里云MQC官方文档说支持多种依赖库,包括appium+junit、appium+python等,首先尝试了appium+junit不成功,官方解释说java支持的版本不全,让改成appium+python,总之过程很曲折
官方文档:https://help.aliyun.com/product/50644.html?spm=a2c4g.11186623.6.540.3f4a44bfPpPJfu
Appium+Junit 1、本地以appium+junit+maven的框架完成测试脚本,注意类名是Main

import io.appium.java_client.AppiumDriver; import io.appium.java_client.ios.IOSDriver; import org.junit.Before; import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.net.URL; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @FixMethodOrder(MethodSorters.JVM) public class Main { public static AppiumDriver driver; public static WebElement waitForElement(final String way, final String str) { @Test public static void setup() throws Exception { DesiredCapabilities capabilities=new DesiredCapabilities(); driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); }

【阿里云测平台|阿里云测平台 Appium iOS移动自动化】2、本地运行通过后,将Main.java压缩成zip格式上传到MQC平台
Appium+python 1、本地编写脚本
# -*- coding: utf-8 -*- from appium import webdriver # 引入刚刚创建的同目录下的desired_capabilities.py from test import desired_capabilities # 我们使用python的unittest作为单元测试工具 from unittest import TestCase # 我们使用python的unittest作为单元测试工具 import unittest # 使用time.sleep(xx)函数进行等待 import time class MqcTest(TestCase): def setUp(self): # 获取我们设定的capabilities,通知Appium Server创建相应的会话。 desired_caps = desired_capabilities.get_desired_capabilities() # 获取server的地址 uri = desired_capabilities.get_uri() # 创建会话,得到driver对象,driver对象封装了所有的设备操作。 self.driver = webdriver.Remote(uri, desired_caps) # 等待app完全加载 time.sleep(5) # 第1个用例,如果检测到弹框,就点掉 def test_case_login(self): a1 = 300.0/ 414.0 b1 = 430.0/ 736.0 # 获取当前手机屏幕大小X,Y X = self.driver.get_window_size()['width'] Y = self.driver.get_window_size()['height'] time.sleep(3) self.driver.tap([(a1 * X, b1 * Y)]) time.sleep(3) self.driver.tap([(a1 * X, b1 * Y)]) time.sleep(3) #self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeOther[3]").click() #self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeOther[3]").click() #self.driver.find_element_by_name("好").click() #self.driver.find_element_by_name("允许").click() severip=self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeTextField[1]") severip.clear() severip.click() severip.send_keys("your serverip") self.driver.find_element_by_name("确定").click() time.sleep(3)account = self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeTextField[1]") account.clear() account.click() account.send_keys("your account")password = self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeSecureTextField[1]") password.clear() account.click() password.send_keys("your password")self.driver.find_element_by_name("登录").click() time.sleep(5)def tearDown(self): # 测试结束,退出会话 self.driver.quit() if __name__ == '__main__': try: unittest.main() except SystemExit: pass

2、本地运行成功后修改脚本,如下
(1)增加获取测试框架:self.automationName = desired_caps.get('automationName')
(2)删除后面的if __name__ == '__main__':
(3)去掉本地包名相关的东西,把from test import desired_capabilities修改为import desired_capabilities
# -*- coding: utf-8 -*- from appium import webdriver # 引入刚刚创建的同目录下的desired_capabilities.py import desired_capabilities # 我们使用python的unittest作为单元测试工具 from unittest import TestCase # 我们使用python的unittest作为单元测试工具 import unittest # 使用time.sleep(xx)函数进行等待 import time class MqcTest(TestCase): global automationName def setUp(self): # 获取我们设定的capabilities,通知Appium Server创建相应的会话。 desired_caps = desired_capabilities.get_desired_capabilities() # 获取server的地址 uri = desired_capabilities.get_uri() #获取测试框架 self.automationName = desired_caps.get('automationName') # 创建会话,得到driver对象,driver对象封装了所有的设备操作。 self.driver = webdriver.Remote(uri, desired_caps) # 等待app完全加载 time.sleep(5) # 第1个用例,如果检测到弹框,就点掉 def test_case_login(self): a1 = 300.0/ 414.0 b1 = 430.0/ 736.0 # 获取当前手机屏幕大小X,Y X = self.driver.get_window_size()['width'] Y = self.driver.get_window_size()['height'] time.sleep(3) self.driver.tap([(a1 * X, b1 * Y)]) time.sleep(3) self.driver.tap([(a1 * X, b1 * Y)]) time.sleep(3) #self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeOther[3]").click() #self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeOther[3]").click() #self.driver.find_element_by_name("好").click() #self.driver.find_element_by_name("允许").click() severip=self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeTextField[1]") severip.clear() severip.click() severip.send_keys("your serverip") self.driver.find_element_by_name("确定").click() time.sleep(3)account = self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeTextField[1]") account.clear() account.click() account.send_keys("your account")password = self.driver.find_element_by_xpath("//XCUIElementTypeOther[1]/XCUIElementTypeSecureTextField[1]") password.clear() account.click() password.send_keys("your password")self.driver.find_element_by_name("登录").click() time.sleep(5)def tearDown(self): # 测试结束,退出会话 self.driver.quit()

3、将main.py文件打包成zip格式上传到云测平台,选择iOS功能测试

阿里云测平台|阿里云测平台 Appium iOS移动自动化
文章图片
屏幕快照 2019-01-08 下午1.31.25.png
最后,MQC局限性很多,费用也较高,一次一台机型需要20RMB

    推荐阅读