qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          IOS無線客戶端自動化測試

          做IOS自動化的過程中,會遇到兩個問題,需要開發對代碼的支持。
            1. 用instruments總是會獲取不到一些UI元素
            2. 客戶端中沒有固定的ID供測試代碼來確定頁面元素。然后只能通過target.frontMostApp().mainWindow().scrollViews()[0].tableViews()[0].cells()[0].tap(); 這樣的方式來定位元素。
            第一個問題產生的原因是在客戶端開發的過程,需要自定義大量的UIView來滿足需求。這些UI有兩種構建方式,
            1. 用原生的UI組件來拼接
            2. 通過一些自己來畫
            instruments 是通過元素的isAccessibilityElement屬性來判定元素是否可見。
            解決方案:
            1. 原生的UI組件的isAccessibilityElement默認是YES的。自定義的UI組件的isAccessibilityElement屬性是NO,當isAccessibilityElement為NO時,instruments將無法捕獲。而且蘋果的UI還有覆蓋性之說,所以這種情況,我們需要將自定義的 UI的子UI的isAccessibilityElement屬性置為YES,而不是自定義的UI本身,instruments就能獲取到。
            如
          @interface SNCommentHeaderView : UIView
          {
          UIImageView    *headerBgView;
          UILabel        *titleLabel;
          }
          - (id)initWithFrame:(CGRect)frame
          {
          NSLog(@"SNCommentHeaderView_init");
          self = [super initWithFrame:frame];
          if (self) {
          // Initialization code
          headerBgView = [[UIImageView alloc] initWithImage:[UIImage skinImageNamed:@"comment_sectionheader_title_bg.png"]];
          CGRect bgFrame = headerBgView.frame;
          bgFrame.origin.y = 10;
          headerBgView.frame = bgFrame;
          headerBgView.isAccessibilityElement = YES;
          [self addSubview:headerBgView];
          titleLabel = [[UILabel alloc] initWithFrame:UIEdgeInsetsInsetRect(bgFrame, UIEdgeInsetsMake(0, 0, 1.5, 0))];
          titleLabel.backgroundColor = [UIColor clearColor];
          titleLabel.font = [UIFont fontWithName:BOLD_FONT_NAME size:12];
          titleLabel.textAlignment = UITextAlignmentCenter;
          titleLabel.textColor = [UIColor skinColorForKey:SNSkinCommentSectionHeaderColor];
          titleLabel.isAccessibilityElement = YES;
          [self addSubview:titleLabel];
          }
          return self;
          }
            2. 非原生控件成的UI,instruments暫時是不支持獲取的。在蘋果官方文檔中又一套非正式的創建自定義UI的方式。針對這種情況,只能通過去定位他的父節點定位了。如果需要驗證的話,可以將自定義UI的內容通過設置accessibilityIdentifier或者accessibilityLabel,然后通過父節點取得值來驗證。
            做IOS自動化,只能通過target.frontMostApp().mainWindow().scrollViews()[0].tableViews()[0].cells()[0].tap(); 這樣來定位坐標是個很原始的方式,而且需要變化比較快,一旦UI方式改變,case會受到很大的影響。所以假使在源碼中通過對一些比較固定或case中功能點的元素設置accessibilityIdentifier,然后腳本可以通過這accessibilityIdentifier來定位元素,可以大大減少自動化腳本的維護成本,也可大大提高開發速度。

          posted on 2014-07-02 16:34 順其自然EVO 閱讀(770) 評論(0)  編輯  收藏 所屬分類: android

          <2014年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 麻城市| 且末县| 固镇县| 泗洪县| 辽阳市| 石渠县| 辛集市| 蒙阴县| 三都| 迁安市| 广昌县| 沾益县| 通江县| 云南省| 临洮县| 淳化县| 巨野县| 海盐县| 铁岭县| 河北省| 普安县| 合山市| 肥城市| 休宁县| 视频| 德昌县| 张家港市| 三亚市| 宁阳县| 元氏县| 乐陵市| 密云县| 临邑县| 类乌齐县| 来宾市| 墨竹工卡县| 翁源县| 外汇| 乡宁县| 泰顺县| 大丰市|