iOS 系统UI自动化测试介绍(2)

发表于:2016-11-15来源:简书作者:孢子菌点击数: 标签:自动化测试
看这个简单的小栗子,操作流程:找到tabbar-找到名称是First的button点击-给第一个textField设值-点击键盘的return-取id是RecipeName的staticTexts(label)的值-断言该

看这个简单的小栗子,操作流程:找到tabbar->找到名称是“First”的button点击->给第一个textField设值->点击键盘的return->取id是“RecipeName”的staticTexts(label)的值->断言该label内容和之前输入内容的相等。

可以看出寻找控件的两种方式:依据控件Accessibility identitifer查找;依据控件在数组的下标查找。前者需要你去设置,增加开发时成本。后者的变化性高,UI层级改变导致你的用例改变。

test("Test 1", function(target, app) {

     target.logDevice();

     var window = app.mainWindow();
     app.logElementTree();

     //-- select the elements
     UIALogger.logMessage( "Select the first tab" );
     var tabBar = app.tabBar();
     var selectedTabName = tabBar.selectedButton().name();
     if (selectedTabName != "First") {
        tabBar.buttons()["First"].tap();
     }

     //-- tap on the text fiels
     UIALogger.logMessage( "Tap on the text field now" );

     var recipeName = "Unusually Long Name for a Recipe";
     window.textFields()[0].setValue(recipeName);

     target.delay( 2 );

     //-- tap on the text fiels
     UIALogger.logMessage( "Dismiss the keyboard" );
     app.logElementTree();
     app.keyboard().buttons()["return"].tap();

     var textValue = window.staticTexts()["RecipeName"].value();

     assertEquals(recipeName, textValue);
});

这里有篇详细的教程,如果想要UIAutomation的表现可以下载一个Xcode 7来跑一跑。Demo请戳我

3.UITest

UITest是Apple随着Xcode 7和iOS 9新的UI自动化测试框架。较之前不同的是,在UITest框架下,我们可以使用自己熟悉的Objc和Swift语言来编写自动化测试的脚本。除此之外,UITest最大的亮点是支持屏幕录制——通过对App的操作自动生成相应的测试脚本代码。这意味着非专业人士,也可以很方便地参与到自动化测试里来。

原理和UIAutomation一样,UITest也依赖控件的Accessibility属性,UITest为所有UIKit控件提供了一个XCUI开头的代理类。比如UIApplication,对应的是XCUIApplication,在 UI Testing 中代表整个 app 的对象。

对于一般的UIKit对象,Apple提供XCUIElement对象作为映射。我们不能直接通过得到的 XCUIElement 来直接访问被测 app 中的元素,而只能通过 Accessibility 中的像是 identifier 或者 frame 这样的属性来获取 UI 的信息。关于具体的可用属性,可以参看 XCUIElementAttributes 的文档。虽然不能直接通过Element得到属性,但是可以通过- descendantsMatchingType:,访问子节点,从而得到层级结构。

hello world和屏幕录制操作,可以参考喵大的笔记,附有demo哦。

4.Appium

UITest支持iOS开发熟悉的编程语言、屏幕录制等多项强大功能,但这些都是和Xcode这个IDE绑定的。当我们在Xcode里写完代码,本地运行,这种种更像是单元测试,而没有太多自动化的味道了。一段真正的自动化测试脚本,应该和被测代码分开,能够部署到一台服务器上自动运行,让一项自动化测试真正自动化起来,成为了我的小目标3.0版本。在这里,Appium这个强大的自动化测试工具登场了,看看他的自我介绍。

Appium 是一个开源的,跨平台的自动化测试工具。 它支持模拟器(iOS,FirefoxOS,Android)和真机(iOS, Android, FirefoxOS)上的原生应用,混合应用和移动 web 应用。

原文转自:http://www.jianshu.com/p/aae160cb9cc4

...