1. XCUIApplication 這是你正在測試的應用的代理。它能讓你啟動應用,這樣你就能執行測試了。它每次都會新起一個進程,這會多花一些時間,但是能保證測試應用時的狀態是乾凈的,這樣你需要處理的變數就少了些。 2. XCUIElement 這是你正在測試的應用中UI元素的代理。每個元素都有類型 ...
1. XCUIApplication
這是你正在測試的應用的代理。它能讓你啟動應用,這樣你就能執行測試了。它每次都會新起一個進程,這會多花一些時間,但是能保證測試應用時的狀態是乾凈的,這樣你需要處理的變數就少了些。
- (void)launch;//啟動應用。如果目標應用已運行,首先終止應用,然後再次啟動應用。 - (void)terminate;//關閉應用。 @property (nonatomic, copy) NSArray <NSString *> *launchArguments;//數組對象,保存啟動參數。 @property (nonatomic, copy) NSDictionary <NSString *, NSString *> *launchEnvironment;//字典對象,保存啟動環境變數
2. XCUIElement
這是你正在測試的應用中UI元素的代理。每個元素都有類型和標識符,結合二者就能找到應用中的UI元素。所有的元素都會嵌套在代表你的應用的樹中。
@property (readonly) BOOL exists;
這個控制項是否存在(不管被遮擋或者不在當前屏幕內都是YES)
@property (readonly, getter = isHittable) BOOL hittable;
這個控制項是否能找到一個點可以點擊
- (XCUIElementQuery *)descendantsMatchingType \:(XCUIElementType)type;
在這個元素里按照固定的類型尋找其所有的子元素,如:
在Table的Cell里尋找所有的子Button
locButton = [cell descendantsMatchingType:XCUIElementTypeButton];
- (XCUIElementQuery *)childrenMatchingType \:(XCUIElementType)type;
在這個元素里按照固定的類型尋找其所有直接的子元素(即無法查找子元素的子元素),和上一個方法類似。
- (XCUICoordinate *)coordinateWithNormalizedOffset \:(CGVector)normalizedOffset;
在這個控制項里根據CGVector的比例返回一個點。
XCUICoordinate *bot = [window coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.5)];//在Window中X比例為0.5,Y比例為0.5的一個點
@property (readonly, copy) NSString *debugDescription;
上面已經敘述過了,就是查詢的調試信息。
- (void)typeText :(NSString *)text;
可以用這個方法對UITextField 和 UITextView等輸入,但調用之前需要確保鍵盤已經彈出,否則會出錯。
- (void)tap;
單擊這個控制項一次
- (void)doubleTap;
雙擊這個控制項一次
- (void)twoFingerTap;
雙指點擊
- (void)tapWithNumberOfTaps :(NSUInteger)numberOfTaps numberOfTouches :(NSUInteger)numberOfTouches;
可以指定點擊幾次,每次用幾個手指
- (void)pressForDuration :(NSTimeInterval)duration;
長按手勢,可以指定長按的時間。
- (void)pressForDuration :(NSTimeInterval)duration thenDragToElement :(XCUIElement *)otherElement;
先長按然後再拖動到另一個元素的位置,多用於TableView的MoveCell。
- (void)swipeUp;
- (void)swipeDown;
- (void)swipeLeft;
- (void)swipeRight;
上下左右滑動的手勢。
- (void)pinchWithScale \:(CGFloat)scale velocity :(CGFloat)velocity;
Pinch的手勢。
- (void)rotate \:(CGFloat)rotation withVelocity :(CGFloat)velocity;
旋轉的手勢。
- (void)adjustToNormalizedSliderPosition :(CGFloat)normalizedSliderPosition;
設置一個Slider當前的Value值,設置的值的範圍在[0 , 1]。
@property (readonly) CGFloat normalizedSliderPosition;
返回一個Slider當前Value的值,值的範圍在[0 , 1]。
- (void)adjustToPickerWheelValue :(NSString *)pickerWheelValue;
設置一個PikerView的值為多少。
3. XCUIElementAttributes
/*! The accessibility identifier. */ @property (readonly) NSString *identifier; /*! The frame of the element in the screen coordinate space. */ @property (readonly) CGRect frame; /*! The raw value attribute of the element. Depending on the element, the actual type can vary. */ @property (readonly, nullable) id value; /*! The title attribute of the element. */ @property (readonly, copy) NSString *title; /*! The label attribute of the element. */ @property (readonly, copy) NSString *label; /*! The type of the element. /seealso XCUIElementType. */ @property (readonly) XCUIElementType elementType; /*! Whether or not the element is enabled for user interaction. */ @property (readonly, getter = isEnabled) BOOL enabled; /*! The horizontal size class of the element. */ @property (readonly) XCUIUserInterfaceSizeClass horizontalSizeClass; /*! The vertical size class of the element. */ @property (readonly) XCUIUserInterfaceSizeClass verticalSizeClass; /*! The value that is displayed when the element has no value. */ @property (readonly, nullable) NSString *placeholderValue; /*! Whether or not the element is selected. */ @property (readonly, getter = isSelected) BOOL selected; #if TARGET_OS_TV /*! Whether or not the elment has UI focus. */ @property (readonly) BOOL hasFocus;
4. XCUIElementTypeQueryProvider協議
@property (readonly, copy) XCUIElementQuery *touchBars; @property (readonly, copy) XCUIElementQuery *groups; @property (readonly, copy) XCUIElementQuery *windows; @property (readonly, copy) XCUIElementQuery *sheets; @property (readonly, copy) XCUIElementQuery *drawers; @property (readonly, copy) XCUIElementQuery *alerts; @property (readonly, copy) XCUIElementQuery *dialogs; @property (readonly, copy) XCUIElementQuery *buttons; @property (readonly, copy) XCUIElementQuery *radioButtons; @property (readonly, copy) XCUIElementQuery *radioGroups; @property (readonly, copy) XCUIElementQuery *checkBoxes; @property (readonly, copy) XCUIElementQuery *disclosureTriangles; @property (readonly, copy) XCUIElementQuery *popUpButtons; @property (readonly, copy) XCUIElementQuery *comboBoxes; @property (readonly, copy) XCUIElementQuery *menuButtons; @property (readonly, copy) XCUIElementQuery *toolbarButtons; @property (readonly, copy) XCUIElementQuery *popovers; @property (readonly, copy) XCUIElementQuery *keyboards; @property (readonly, copy) XCUIElementQuery *keys; @property (readonly, copy) XCUIElementQuery *navigationBars; @property (readonly, copy) XCUIElementQuery *tabBars; @property (readonly, copy) XCUIElementQuery *tabGroups; @property (readonly, copy) XCUIElementQuery *toolbars; @property (readonly, copy) XCUIElementQuery *statusBars; @property (readonly, copy) XCUIElementQuery *tables; @property (readonly, copy) XCUIElementQuery *tableRows; @property (readonly, copy) XCUIElementQuery *tableColumns; @property (readonly, copy) XCUIElementQuery *outlines; @property (readonly, copy) XCUIElementQuery *outlineRows; @property (readonly, copy) XCUIElementQuery *browsers; @property (readonly, copy) XCUIElementQuery *collectionViews; @property (readonly, copy) XCUIElementQuery *sliders; @property (readonly, copy) XCUIElementQuery *pageIndicators; @property (readonly, copy) XCUIElementQuery *progressIndicators; @property (readonly, copy) XCUIElementQuery *activityIndicators; @property (readonly, copy) XCUIElementQuery *segmentedControls; @property (readonly, copy) XCUIElementQuery *pickers; @property (readonly, copy) XCUIElementQuery *pickerWheels; @property (readonly, copy) XCUIElementQuery *switches; @property (readonly, copy) XCUIElementQuery *toggles; @property (readonly, copy) XCUIElementQuery *links; @property (readonly, copy) XCUIElementQuery *images; @property (readonly, copy) XCUIElementQuery *icons; @property (readonly, copy) XCUIElementQuery *searchFields; @property (readonly, copy) XCUIElementQuery *scrollViews; @property (readonly, copy) XCUIElementQuery *scrollBars; @property (readonly, copy) XCUIElementQuery *staticTexts; @property (readonly, copy) XCUIElementQuery *textFields; @property (readonly, copy) XCUIElementQuery *secureTextFields; @property (readonly, copy) XCUIElementQuery *datePickers; @property (readonly, copy) XCUIElementQuery *textViews; @property (readonly, copy) XCUIElementQuery *menus; @property (readonly, copy) XCUIElementQuery *menuItems; @property (readonly, copy) XCUIElementQuery *menuBars; @property (readonly, copy) XCUIElementQuery *menuBarItems; @property (readonly, copy) XCUIElementQuery *maps; @property (readonly, copy) XCUIElementQuery *webViews; @property (readonly, copy) XCUIElementQuery *steppers; @property (readonly, copy) XCUIElementQuery *incrementArrows; @property (readonly, copy) XCUIElementQuery *decrementArrows; @property (readonly, copy) XCUIElementQuery *tabs; @property (readonly, copy) XCUIElementQuery *timelines; @property (readonly, copy) XCUIElementQuery *ratingIndicators; @property (readonly, copy) XCUIElementQuery *valueIndicators; @property (readonly, copy) XCUIElementQuery *splitGroups; @property (readonly, copy) XCUIElementQuery *splitters; @property (readonly, copy) XCUIElementQuery *relevanceIndicators; @property (readonly, copy) XCUIElementQuery *colorWells; @property (readonly, copy) XCUIElementQuery *helpTags; @property (readonly, copy) XCUIElementQuery *mattes; @property (readonly, copy) XCUIElementQuery *dockItems; @property (readonly, copy) XCUIElementQuery *rulers; @property (readonly, copy) XCUIElementQuery *rulerMarkers; @property (readonly, copy) XCUIElementQuery *grids; @property (readonly, copy) XCUIElementQuery *levelIndicators; @property (readonly, copy) XCUIElementQuery *cells; @property (readonly, copy) XCUIElementQuery *layoutAreas; @property (readonly, copy) XCUIElementQuery *layoutItems; @property (readonly, copy) XCUIElementQuery *handles; @property (readonly, copy) XCUIElementQuery *otherElements;