UITesting深入测试

1、物理按键


屏幕显示选择项
    XCUIDevice *device = [XCUIDevice sharedDevice];
    
    //Home键
    [device pressButton:XCUIDeviceButtonHome];
    
    //音量键
    [device pressButton:XCUIDeviceButtonVolumeUp];
    [device pressButton:XCUIDeviceButtonVolumeDown];
    
    UIDeviceOrientation orientation = device.orientation;
    
    //将画面转成直向 Portrait
    device.orientation = UIDeviceOrientationPortrait;
    
    //将画面转成直向 Portrait Upside Down
    device.orientation = UIDeviceOrientationPortraitUpsideDown;
    
    //将画面转成横向 Landscape Left
    device.orientation = UIDeviceOrientationLandscapeLeft;
    
    //将画面转成横 Landscape Right
    device.orientation = UIDeviceOrientationLandscapeRight;

2、判断是否可点击

XCUIElement *tabLiveButton =  tabBarsQuery.buttons[@"tab live"];
//是否存在
BOOL exists = tabLiveButton.exists;
//是否可见
BOOL hittable = tabLiveButton.hittable;

3、CollectionView滑动操作

  XCUIApplication *application = [[XCUIApplication alloc] init];
 
 // 找到当前界面上所有的collectionView   
  XCUIElementQuery *collectionViewsQuery = application.collectionViews;
  NSInteger queryCount = collectionViewsQuery.count;
  
  //给出一个frame,用来匹配想要操作的collectionView
    CGRect colletionFrame = CGRectMake(0, 64, 375.0, 667.0 - 64);
    
    for (int i = 0; i < queryCount; i++) {
        XCUIElement *collection = collectionViewsQuery.allElementsBoundByIndex[i];
        
        CGRect tempFrame = collection.frame;
        
        if (CGRectContainsRect(colletionFrame, tempFrame) && [collection canOperateElement]) {
            self.collectionView = collection;            
        }
    }
  //滑动操作
   [self.collectionView swipeUp];
   [self.collectionView swipeDown];

4、cell查找并点击

  //当前找到的collectionView中的cell
    self.cells = [self.collectionView descendantsMatchingType:XCUIElementTypeCell];
    NSInteger cellCount = self.cells.count;
    if (cellCount > 0) {        
        XCUIElement *lastCell = self.cells.allElementsBoundByIndex[cellCount -1];
        //滑动到最后
        if ([self.collectionView canOperateElement]) {
        XCUIElement *lastCell = self.cells.allElementsBoundByIndex[cellCount -1];
        //这里应该还有个滑动查找的过程,后续讲解
        if ([lastCell canOperateElement]) {
            //进行点击操作
            [lastCell tap];
        }
    }

5、UITesting框架中提供的wait方法:

- (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout handler:(nullable XCWaitCompletionHandler)handler;

默认是在一定时间内查找控件失败后,即结束整个测试;这里提供另一种手动运行循环方式,反复运行断言

    XCUIApplication *app = [[XCUIApplication alloc] init];
    XCUIElement *splash = app.otherElements[@"splash viewcontroller"];
    
    NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate];
    NSInteger loopDuration = [NSDate timeIntervalSinceReferenceDate] - startTime;
   
    while (!splash.exists || loopDuration < 2.0) {
        splash = app.otherElements[@"splash viewcontroller"];
        loopDuration = [NSDate timeIntervalSinceReferenceDate] - startTime;
        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5, NO);
    }

备注:上为每0.5判断一次是否存在splash viewcontroller;若超过2s仍未找到该页面,则停止循环查找

6、点击某一个具体的坐标点。由于UITesting Bundle未提供点击左边的相关API,这里给出曲线救国方式:

- (void)customTapElementAtPoint:(CGPoint)point pressDuration:(NSTimeInterval)duration{
    //CGVectorMake(0.0, 0.0) screen origin
    //dx: 0.0, dy: 0.0 - The "-10" means scroll 10 points down.
    XCUICoordinate *coordinate = [self coordinateWithNormalizedOffset:CGVectorMake(0, 0)];
    [[coordinate coordinateWithOffset:CGVectorMake(point.x, point.y) ] pressForDuration:duration];
}

备注:根据API Refrence提供的文档,对上述方法加以解释

(1)- (XCUICoordinate *)coordinateWithNormalizedOffset:(CGVector)normalizedOffset;
这里得到的坐标为:
x = element.frame.x * 0;
y = element.frame.y * 0;

(2)- (XCUICoordinate *)coordinateWithOffset:(CGVector)offsetVector;
在上面已经得到的坐标(也就是屏幕的原点(0,0))基础上,偏移point的位置,得到需要点击的坐标点。
需要注意的是,这里的偏移量是以element的坐标原点为基准。比如,element的原坐标为(100,100),想要的偏移量为point(20,20),最终点击的坐标点即为:(120,120)

7、录制时生成代码如下:
[app.alerts[@"\U8981\U56de\U5230\U62cd\U6444\U9875\U9762\U5417\Uff1f"].buttons[@"\U786e\U5b9a"] tap];
这里报错是因为元素的中文字符取的是其unicode编码,碰到这种情况,需要手动修正下代码,改为中文即可。

8、报错:
Failed to load test bundle from file:///Users/dongmeiliang/Library/Developer/Xcode/DerivedData/JSQMessages-axyqhmblkssajpgcyzizcquhltft/Build/Products/Debug-iphonesimulator/JSQMessages.app/PlugIns/JSQMessagesTests.xctest/../JSQMessagesTests.xctest/: Error Domain=NSCocoaErrorDomain Code=4 "The bundle “$(PRODUCT_NAME)” couldn’t be loaded because its executable couldn’t be located." UserInfo={NSLocalizedFailureReason=The bundle’s executable couldn’t be located., NSLocalizedRecoverySuggestion=Try reinstalling the bundle., NSBundlePath=/Users/dongmeiliang/Library/Developer/Xcode/DerivedData/JSQMessages-axyqhmblkssajpgcyzizcquhltft/Build/Products/Debug-iphonesimulator/JSQMessages.app/PlugIns/JSQMessagesTests.xctest, NSLocalizedDescription=The bundle “$(PRODUCT_NAME)” couldn’t be loaded because its executable couldn’t be located.}

修改:
Tests target > info.plist > delete the row Bundle name $(PRODUCT_NAME)

9、报错:
The bundle UITesting couldn’t be loaded because its executable couldn’t be located. Try reinstalling the bundle.

方法:
http://stackoverflow.com/questions/34704388/xctest-error-the-bundle-couldn-t-be-loaded-try-reinstalling-the-bundle

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容