Best EarlGrey code snippet using performAction.grey_scrollToContentEdge
FTRScrollViewTest.m
Source: FTRScrollViewTest.m
...31 usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 50)32 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]33 assertWithMatcher:grey_sufficientlyVisible()];34 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]35 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];36 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]37 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];38}39- (void)testScrollToBottomEdge {40 [[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]41 performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)]42 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeBottom)];43}44- (void)testScrollToRightEdge {45 [[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]46 performAction:grey_scrollToContentEdge(kGREYContentEdgeRight)]47 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeRight)];48}49- (void)testScrollToLeftEdge {50 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]51 performAction:grey_scrollToContentEdge(kGREYContentEdgeRight)];52 [[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]53 performAction:grey_scrollToContentEdge(kGREYContentEdgeLeft)]54 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeLeft)];55}56- (void)testScrollToLeftEdgeWithCustomStartPoint {57 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]58 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeLeft, 0.5, 0.5)];59 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]60 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeLeft)];61}62- (void)testScrollToRightEdgeWithCustomStartPoint {63 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]64 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeRight, 0.5, 0.5)];65 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]66 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeRight)];67}68- (void)testScrollToTopEdgeWithCustomStartPoint {69 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]70 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeTop, 0.5, 0.5)];71 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]72 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];73}74- (void)testScrollToBottomEdgeWithCustomStartPoint {75 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]76 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeBottom, 0.5, 0.5)];77 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]78 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeBottom)];79}80- (void)testScrollToTopWorksWithPositiveInsets {81 // Scroll down.82 id<GREYMatcher> matcher = grey_allOf(grey_accessibilityLabel(@"Label 2"), grey_interactable(),83 grey_sufficientlyVisible(), nil);84 [[[EarlGrey selectElementWithMatcher:matcher]85 usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 50)86 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]87 assertWithMatcher:grey_sufficientlyVisible()];88 // Add positive insets using this format {top,left,bottom,right}89 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]90 performAction:grey_typeText(@"{100,0,0,0}\n")];91 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]92 performAction:grey_turnSwitchOn(YES)];93 // Scroll to top and verify.94 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]95 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];96 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]97 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];98}99- (void)testScrollToTopWorksWithNegativeInsets {100 // Scroll down.101 id<GREYMatcher> matcher =102 grey_allOf(grey_accessibilityLabel(@"Label 2"), grey_interactable(), nil);103 [[[EarlGrey selectElementWithMatcher:matcher]104 usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 50)105 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]106 assertWithMatcher:grey_sufficientlyVisible()];107 // Add positive insets using this format {top,left,bottom,right}108 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]109 performAction:grey_typeText(@"{-100,0,0,0}\n")];110 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]111 performAction:grey_turnSwitchOn(YES)];112 // Scroll to top and verify.113 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]114 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];115 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]116 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];117}118- (void)testSearchActionReturnsNilWhenElementIsNotFound {119 id<GREYMatcher> matcher =120 grey_allOf(grey_accessibilityLabel(@"Unobtainium"), grey_interactable(), nil);121 [[[EarlGrey selectElementWithMatcher:matcher]122 usingSearchAction:grey_scrollInDirection(kGREYDirectionUp, 50)123 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]124 assertWithMatcher:grey_nil()];125}126- (void)testScrollToTopWhenAlreadyAtTheTopWithoutBounce {127 GREYHostApplicationDistantObject *host = GREYHostApplicationDistantObject.sharedInstance;128 id<GREYAction> bounceOff = [host actionForToggleBounces];129 // Verify this test with and without bounce enabled by toggling it.130 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]131 performAction:bounceOff];132 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]133 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];134 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]135 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];136}137- (void)testScrollToTopWhenAlreadyAtTheTopWithBounce {138 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]139 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];140 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]141 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];142}143- (void)testVisibilityOnPartiallyObscuredScrollView {144 GREYHostApplicationDistantObject *host = GREYHostApplicationDistantObject.sharedInstance;145 id<GREYAssertion> assertion = [host assertionWithPartiallyVisible];146 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]147 assert:assertion];148}149- (void)testInfiniteScroll {150 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]151 performAction:grey_scrollInDirection(kGREYDirectionDown, 100)];152}153- (void)testScrollInDirectionCausesExactChangesToContentOffsetInPortraitMode {154 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];155}156- (void)testScrollInDirectionCausesExactChangesToContentOffsetInPortraitUpsideDownMode {157 [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationPortraitUpsideDown error:nil];158 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];159}160- (void)testScrollInDirectionCausesExactChangesToContentOffsetInLandscapeLeftMode {161 [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationLandscapeLeft error:nil];162 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];163}164- (void)testScrollInDirectionCausesExactChangesToContentOffsetInLandscapeRightMode {165 [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationLandscapeRight error:nil];166 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];167}168// TODO: Because the action is performed outside the main thread, the synchronization // NOLINT169// waits until the scrolling stops, where the scroll view's inertia causes itself170// to move more than needed.171- (void)testScrollInDirectionCausesExactChangesToContentOffsetWithTinyScrollAmounts {172 // Scroll by a fixed amount and verify that the scroll offset has changed by that amount.173 // Go down to (0, 7)174 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]175 performAction:grey_scrollInDirection(kGREYDirectionDown, 7)];176 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]177 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 7)))];178 // Go right to (6, 7)179 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]180 performAction:grey_scrollInDirection(kGREYDirectionRight, 6)];181 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]182 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(6, 7)))];183 // Go up to (6, 4)184 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]185 performAction:grey_scrollInDirection(kGREYDirectionUp, 3)];186 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]187 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(6, 4)))];188 // Go left to (3, 4)189 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]190 performAction:grey_scrollInDirection(kGREYDirectionLeft, 3)];191 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]192 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(3, 4)))];193}194- (void)testScrollToTopWithZeroXOffset {195 // Scroll down.196 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]197 performAction:grey_scrollInDirection(kGREYDirectionDown, 500)];198 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]199 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 500)))];200 // Scroll up using grey_scrollToTop(...) and verify scroll offset is back at 0.201 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]202 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];203 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]204 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 0)))];205}206- (void)testScrollToTopWithNonZeroXOffset {207 // Scroll to (50, 400)208 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]209 performAction:grey_scrollInDirection(kGREYDirectionDown, 400)];210 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]211 performAction:grey_scrollInDirection(kGREYDirectionRight, 50)];212 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]213 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(50, 400)))];214 // Scroll up using grey_scrollToContentEdge(...) and verify scroll offset is back at 0.215 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]216 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];217 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]218 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(50, 0)))];219}220- (void)testScrollingBeyondTheContentViewCausesScrollErrors {221 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]222 performAction:grey_scrollInDirection(kGREYDirectionDown, 100)];223 NSError *scrollError;224 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]225 performAction:grey_scrollInDirection(kGREYDirectionUp, 200)226 error:&scrollError];227 GREYAssertEqualObjects(scrollError.domain, kGREYScrollErrorDomain, @"should be equal");228 GREYAssertEqual(scrollError.code, kGREYScrollReachedContentEdge, @"should be equal");229}230- (void)testSetContentOffsetAnimatedYesWaitsForAnimation {231 [self ftr_setContentOffSet:CGPointMake(0, 100) animated:YES];232 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"SquareElementLabel")]233 assertWithMatcher:grey_sufficientlyVisible()];234}235- (void)testSetContentOffsetAnimatedNoDoesNotWaitForAnimation {236 [self ftr_setContentOffSet:CGPointMake(0, 100) animated:NO];237 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"SquareElementLabel")]238 assertWithMatcher:grey_sufficientlyVisible()];239}240- (void)testSetContentOffsetToSameCGPointDoesNotWait {241 [self ftr_setContentOffSet:CGPointZero animated:YES];242}243- (void)testContentSizeSmallerThanViewSize {244 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Small Content Scroll View")]245 performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)];246}247#pragma mark - Private248// Asserts that the scroll actions work accurately in all four directions by verifying the content249// offset changes caused by them.250- (void)ftr_assertScrollInDirectionCausesExactChangesToContentOffset {251 // Scroll by a fixed amount and verify that the scroll offset has changed by that amount.252 // Go down to (0, 99)253 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]254 performAction:grey_scrollInDirection(kGREYDirectionDown, 99)];255 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]256 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 99)))];257 // Go right to (77, 99)258 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]259 performAction:grey_scrollInDirection(kGREYDirectionRight, 77)];...
ScrollViewTest.m
Source: ScrollViewTest.m
...31 usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 50)32 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]33 assertWithMatcher:grey_sufficientlyVisible()];34 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]35 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];36 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]37 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];38}39- (void)testScrollToBottomEdge {40 [[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]41 performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)]42 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeBottom)];43}44- (void)testScrollToRightEdge {45 [[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]46 performAction:grey_scrollToContentEdge(kGREYContentEdgeRight)]47 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeRight)];48}49- (void)testScrollToLeftEdge {50 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]51 performAction:grey_scrollToContentEdge(kGREYContentEdgeRight)];52 [[[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]53 performAction:grey_scrollToContentEdge(kGREYContentEdgeLeft)]54 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeLeft)];55}56- (void)testScrollToLeftEdgeWithCustomStartPoint {57 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]58 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeLeft, 0.5, 0.5)];59 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]60 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeLeft)];61}62- (void)testScrollToRightEdgeWithCustomStartPoint {63 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]64 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeRight, 0.5, 0.5)];65 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]66 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeRight)];67}68- (void)testScrollToTopEdgeWithCustomStartPoint {69 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]70 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeTop, 0.5, 0.5)];71 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]72 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];73}74- (void)testScrollToBottomEdgeWithCustomStartPoint {75 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]76 performAction:grey_scrollToContentEdgeWithStartPoint(kGREYContentEdgeBottom, 0.5, 0.5)];77 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]78 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeBottom)];79}80- (void)testScrollToTopWorksWithPositiveInsets {81 // Scroll down.82 id<GREYMatcher> matcher = grey_allOf(grey_accessibilityLabel(@"Label 2"), grey_interactable(),83 grey_sufficientlyVisible(), nil);84 [[[EarlGrey selectElementWithMatcher:matcher]85 usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 50)86 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]87 assertWithMatcher:grey_sufficientlyVisible()];88 // Add positive insets using this format {top,left,bottom,right}89 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]90 performAction:grey_typeText(@"{100,0,0,0}\n")];91 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]92 performAction:grey_turnSwitchOn(YES)];93 // Scroll to top and verify.94 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]95 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];96 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]97 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];98}99- (void)testScrollToTopWorksWithNegativeInsets {100 // Scroll down.101 id<GREYMatcher> matcher =102 grey_allOf(grey_accessibilityLabel(@"Label 2"), grey_interactable(), nil);103 [[[EarlGrey selectElementWithMatcher:matcher]104 usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 50)105 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]106 assertWithMatcher:grey_sufficientlyVisible()];107 // Add positive insets using this format {top,left,bottom,right}108 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]109 performAction:grey_typeText(@"{-100,0,0,0}\n")];110 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]111 performAction:grey_turnSwitchOn(YES)];112 // Scroll to top and verify.113 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]114 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];115 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]116 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];117}118- (void)testSearchActionReturnsNilWhenElementIsNotFound {119 id<GREYMatcher> matcher =120 grey_allOf(grey_accessibilityLabel(@"Unobtainium"), grey_interactable(), nil);121 [[[EarlGrey selectElementWithMatcher:matcher]122 usingSearchAction:grey_scrollInDirection(kGREYDirectionUp, 50)123 onElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]124 assertWithMatcher:grey_nil()];125}126- (void)testScrollToTopWhenAlreadyAtTheTopWithoutBounce {127 GREYHostApplicationDistantObject *host = GREYHostApplicationDistantObject.sharedInstance;128 id<GREYAction> bounceOff = [host actionForToggleBounces];129 // Verify this test with and without bounce enabled by toggling it.130 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]131 performAction:bounceOff];132 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]133 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];134 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]135 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];136}137- (void)testScrollToTopWhenAlreadyAtTheTopWithBounce {138 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]139 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];140 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]141 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];142}143- (void)testVisibilityOnPartiallyObscuredScrollView {144 GREYHostApplicationDistantObject *host = GREYHostApplicationDistantObject.sharedInstance;145 id<GREYAssertion> assertion = [host assertionWithPartiallyVisible];146 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Bottom Scroll View")]147 assert:assertion];148}149- (void)testInfiniteScroll {150 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]151 performAction:grey_scrollInDirection(kGREYDirectionDown, 100)];152}153- (void)testScrollInDirectionCausesExactChangesToContentOffsetInPortraitMode {154 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];155}156- (void)testScrollInDirectionCausesExactChangesToContentOffsetInPortraitUpsideDownMode {157 [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationPortraitUpsideDown error:nil];158 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];159}160- (void)testScrollInDirectionCausesExactChangesToContentOffsetInLandscapeLeftMode {161 [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationLandscapeLeft error:nil];162 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];163}164- (void)testScrollInDirectionCausesExactChangesToContentOffsetInLandscapeRightMode {165 [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationLandscapeRight error:nil];166 [self ftr_assertScrollInDirectionCausesExactChangesToContentOffset];167}168// TODO: Because the action is performed outside the main thread, the synchronization // NOLINT169// waits until the scrolling stops, where the scroll view's inertia causes itself170// to move more than needed.171- (void)testScrollInDirectionCausesExactChangesToContentOffsetWithTinyScrollAmounts {172 // Scroll by a fixed amount and verify that the scroll offset has changed by that amount.173 // Go down to (0, 7)174 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]175 performAction:grey_scrollInDirection(kGREYDirectionDown, 7)];176 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]177 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 7)))];178 // Go right to (6, 7)179 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]180 performAction:grey_scrollInDirection(kGREYDirectionRight, 6)];181 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]182 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(6, 7)))];183 // Go up to (6, 4)184 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]185 performAction:grey_scrollInDirection(kGREYDirectionUp, 3)];186 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]187 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(6, 4)))];188 // Go left to (3, 4)189 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]190 performAction:grey_scrollInDirection(kGREYDirectionLeft, 3)];191 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]192 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(3, 4)))];193}194- (void)testScrollToTopWithZeroXOffset {195 // Scroll down.196 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]197 performAction:grey_scrollInDirection(kGREYDirectionDown, 500)];198 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]199 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 500)))];200 // Scroll up using grey_scrollToTop(...) and verify scroll offset is back at 0.201 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]202 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];203 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]204 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 0)))];205}206- (void)testScrollToTopWithNonZeroXOffset {207 // Scroll to (50, 400)208 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]209 performAction:grey_scrollInDirection(kGREYDirectionDown, 400)];210 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]211 performAction:grey_scrollInDirection(kGREYDirectionRight, 50)];212 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]213 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(50, 400)))];214 // Scroll up using grey_scrollToContentEdge(...) and verify scroll offset is back at 0.215 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]216 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];217 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]218 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(50, 0)))];219}220- (void)testScrollingBeyondTheContentViewCausesScrollErrors {221 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]222 performAction:grey_scrollInDirection(kGREYDirectionDown, 100)];223 NSError *scrollError;224 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Upper Scroll View")]225 performAction:grey_scrollInDirection(kGREYDirectionUp, 200)226 error:&scrollError];227 GREYAssertEqualObjects(scrollError.domain, kGREYScrollErrorDomain, @"should be equal");228 GREYAssertEqual(scrollError.code, kGREYScrollReachedContentEdge, @"should be equal");229}230- (void)testSetContentOffsetAnimatedYesWaitsForAnimation {231 [self ftr_setContentOffSet:CGPointMake(0, 100) animated:YES];232 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"SquareElementLabel")]233 assertWithMatcher:grey_sufficientlyVisible()];234}235- (void)testSetContentOffsetAnimatedNoDoesNotWaitForAnimation {236 [self ftr_setContentOffSet:CGPointMake(0, 100) animated:NO];237 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"SquareElementLabel")]238 assertWithMatcher:grey_sufficientlyVisible()];239}240- (void)testSetContentOffsetToSameCGPointDoesNotWait {241 [self ftr_setContentOffSet:CGPointZero animated:YES];242}243- (void)testContentSizeSmallerThanViewSize {244 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Small Content Scroll View")]245 performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)];246}247#pragma mark - Private248// Asserts that the scroll actions work accurately in all four directions by verifying the content249// offset changes caused by them.250- (void)ftr_assertScrollInDirectionCausesExactChangesToContentOffset {251 // Scroll by a fixed amount and verify that the scroll offset has changed by that amount.252 // Go down to (0, 99)253 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]254 performAction:grey_scrollInDirection(kGREYDirectionDown, 99)];255 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"topTextbox")]256 assertWithMatcher:grey_text(NSStringFromCGPoint(CGPointMake(0, 99)))];257 // Go right to (77, 99)258 [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Infinite Scroll View")]259 performAction:grey_scrollInDirection(kGREYDirectionRight, 77)];...
FTRUITableViewTest.m
Source: FTRUITableViewTest.m
...56 [[self ftr_scrollToCellAtIndex:20 byScrollingInAmounts:200 InDirection:kGREYDirectionDown]57 assertWithMatcher:grey_notNil()];58 // Scroll to top and verify that we are at the top.59 [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]60 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)]61 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];62}63- (void)testScrollToTopWithPositiveInsets {64 // Add positive insets using this format {top,left,bottom,right}65 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets value")]66 performAction:grey_typeText(@"{100,0,0,0}\n")];67 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]68 performAction:grey_turnSwitchOn(YES)];69 // Scroll down.70 [[self ftr_scrollToCellAtIndex:20 byScrollingInAmounts:200 InDirection:kGREYDirectionDown]71 assertWithMatcher:grey_notNil()];72 // Scroll to top and verify that we are at the top.73 [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]74 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)]75 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];76}77- (void)testScrollToTopWithNegativeInsets {78 // Add negative insets using this format {top,left,bottom,right}79 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets value")]80 performAction:grey_typeText(@"{-100,0,0,0}\n")];81 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]82 performAction:grey_turnSwitchOn(YES)];83 // Scroll down.84 [[self ftr_scrollToCellAtIndex:20 byScrollingInAmounts:200 InDirection:kGREYDirectionDown]85 assertWithMatcher:grey_notNil()];86 // Scroll to top and verify that we are at the top.87 [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]88 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)]89 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];90}91- (void)testScrollToTopWhenAlreadyAtTheTopWithoutBounce {92 GREYActionBlock *bounceOff =93 [[GREYActionBlock alloc] initWithName:@"toggleBounces"94 constraints:grey_kindOfClass([UIScrollView class])95 performBlock:^BOOL(UIScrollView *scrollView,96 NSError *__strong *error) {97 GREYAssertTrue(scrollView.bounces, @"Bounce must be set or this test is same as "98 @"testScrollToTopWhenAlreadyAtTheTopWithBounce");99 scrollView.bounces = NO;100 return YES;101 }];102 // Verify this test with and without bounce enabled by toggling it.103 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]104 performAction:bounceOff];105 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]106 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];107 // Verify that top most cell is visible.108 [[EarlGrey selectElementWithMatcher:[self ftr_matcherForCellAtIndex:0]]109 assertWithMatcher:grey_sufficientlyVisible()];110}111- (void)testScrollToTopWhenAlreadyAtTheTopWithBounce {112 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]113 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];114 // Verify that top most cell is visible.115 [[EarlGrey selectElementWithMatcher:[self ftr_matcherForCellAtIndex:0]]116 assertWithMatcher:grey_sufficientlyVisible()];117}118- (void)testTableViewVisibleWhenScrolled {119 [[[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]120 assertWithMatcher:grey_sufficientlyVisible()]121 performAction:grey_swipeFastInDirection(kGREYDirectionUp)]122 performAction:grey_swipeFastInDirection(kGREYDirectionUp)]123 assertWithMatcher:grey_sufficientlyVisible()];124}125- (void)testFrameworkSynchronizesWithScrolling {126 MatchesBlock matchesNotScrolling = ^BOOL(UIScrollView *element) {127 return !element.dragging && !element.decelerating;...
UITableViewTest.m
Source: UITableViewTest.m
...55 [[self ftr_scrollToCellAtIndex:20 byScrollingInAmounts:20056 InDirection:kGREYDirectionDown] assertWithMatcher:grey_notNil()];57 // Scroll to top and verify that we are at the top.58 [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]59 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)]60 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];61}62- (void)testScrollToTopWithPositiveInsets {63 // Add positive insets using this format {top,left,bottom,right}64 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets value")]65 performAction:grey_typeText(@"{100,0,0,0}\n")];66 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]67 performAction:grey_turnSwitchOn(YES)];68 // Scroll down.69 [[self ftr_scrollToCellAtIndex:20 byScrollingInAmounts:20070 InDirection:kGREYDirectionDown] assertWithMatcher:grey_notNil()];71 // Scroll to top and verify that we are at the top.72 [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]73 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)]74 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];75}76- (void)testScrollToTopWithNegativeInsets {77 // Add negative insets using this format {top,left,bottom,right}78 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets value")]79 performAction:grey_typeText(@"{-100,0,0,0}\n")];80 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"insets toggle")]81 performAction:grey_turnSwitchOn(YES)];82 // Scroll down.83 [[self ftr_scrollToCellAtIndex:20 byScrollingInAmounts:20084 InDirection:kGREYDirectionDown] assertWithMatcher:grey_notNil()];85 // Scroll to top and verify that we are at the top.86 [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]87 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)]88 assertWithMatcher:grey_scrolledToContentEdge(kGREYContentEdgeTop)];89}90- (void)testScrollToTopWhenAlreadyAtTheTopWithoutBounce {91 id<GREYAction> bounceOff =92 [GREYHostApplicationDistantObject.sharedInstance actionForTableViewBoundOff];93 // Verify this test with and without bounce enabled by toggling it.94 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]95 performAction:bounceOff];96 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]97 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];98 // Verify that top most cell is visible.99 [[EarlGrey selectElementWithMatcher:[self ftr_matcherForCellAtIndex:0]]100 assertWithMatcher:grey_sufficientlyVisible()];101}102- (void)testScrollToTopWhenAlreadyAtTheTopWithBounce {103 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]104 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];105 // Verify that top most cell is visible.106 [[EarlGrey selectElementWithMatcher:[self ftr_matcherForCellAtIndex:0]]107 assertWithMatcher:grey_sufficientlyVisible()];108}109- (void)testTableViewVisibleWhenScrolled {110 [[[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"main_table_view")]111 assertWithMatcher:grey_sufficientlyVisible()]112 performAction:grey_swipeFastInDirection(kGREYDirectionUp)]113 performAction:grey_swipeFastInDirection(kGREYDirectionUp)]114 assertWithMatcher:grey_sufficientlyVisible()];115}116- (void)testFrameworkSynchronizesWithScrolling {117 id<GREYMatcher> notScrollingMatcher =118 [GREYHostApplicationDistantObject.sharedInstance matcherForNotScrolling];...
SnackbarInteractionTests.m
Source: SnackbarInteractionTests.m
...23 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"back_bar_button")]24 performAction:grey_tap()];25 // Scroll to the top of the main screen26 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"collectionView")]27 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];28}29- (void)testSliding {30 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"collectionView")]31 performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)];32 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"Snackbar")] performAction:grey_tap()];33 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"CellDemo")] performAction:grey_tap()];34 [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"Simple Snackbar")]35 performAction:grey_tap()];36 [SnackbarEarlGreyTests returnToMainScreen];37}38@end...
grey_scrollToContentEdge
Using AI Code Generation
1GREYElementInteraction *interaction = [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"scrollview")] usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 200) onElementWithMatcher:grey_kindOfClass([UIScrollView class])];2[interaction performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];3- (id)perform:(id)element error:(__strong NSError **)errorOrNil {4 if (![element isKindOfClass:[UIScrollView class]]) {5 NSStringFromClass([element class])];6 GREYPopulateErrorNotedOrLog(errorOrNil, kGREYInteractionErrorDomain,7 kGREYInteractionActionFailedErrorCode, reason);8 return nil;9 }10 UIScrollView *scrollView = (UIScrollView *)element;11 return [self grey_scrollToContentEdge:scrollView error:errorOrNil];12}13- (id)grey_scrollToContentEdge:(UIScrollView *)scrollView error:(__strong NSError **)errorOrNil {14 CGPoint contentOffset = [self grey_contentOffsetForEdge:scrollView];15 [scrollView setContentOffset:contentOffset animated:YES];16 return scrollView;17}18- (CGPoint)grey_contentOffsetForEdge:(UIScrollView *)scrollView {19 CGPoint contentOffset = CGPointZero;20 switch (_edge) {21 contentOffset = CGPointMake(0, -scrollView.contentInset.top);22 break;23 CGPointMake(0, scrollView.contentSize.height - scrollView.bounds.size.height +24 scrollView.contentInset.bottom);25 break;26 contentOffset = CGPointMake(-scrollView.contentInset.left, 0);27 break;28 CGPointMake(scrollView.contentSize.width - scrollView.bounds.size.width +29 0);
grey_scrollToContentEdge
Using AI Code Generation
1[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"id")] performAction:grey_scrollToContentEdge(GREYContentEdgeTop)];2+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge;3+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge {4 return [GREYActionBlock actionWithName:[NSString stringWithFormat:@"Scroll to %@", GREYStringFromContentEdge(edge)]5 constraints:grey_respondsToSelector(@selector(scrollView))6 performBlock:^BOOL(id element, __strong NSError *__strong *errorOrNil) {7 UIScrollView *scrollView = (UIScrollView *)element;8 CGPoint contentOffset = scrollView.contentOffset;9 CGRect contentFrame = scrollView.bounds;10 contentFrame.origin = contentOffset;11 toView:scrollView.superview];12 toView:scrollView.superview];13 CGFloat distance = 0;14 switch (edge) {15 distance = CGRectGetMinY(elementRect) - CGRectGetMinY(visibleRect);16 break;17 distance = CGRectGetMinX(elementRect) - CGRectGetMinX(visibleRect);18 break;19 distance = CGRectGetMaxY(visibleRect) - CGRectGetMaxY(elementRect);20 break;21 distance = CGRectGetMaxX(visibleRect) - CGRectGetMaxX(elementRect);22 break;23 }24 if (distance <= 0) {25 return YES;26 }27 contentOffset.y += distance;28 [scrollView setContentOffset:contentOffset animated:YES];29 return YES;30 }];31}32NSString *GREYStringFromContentEdge(GREYContentEdge edge);33NSString *GREYStringFromContentEdge(GREYContentEdge edge) {34 switch (edge) {
grey_scrollToContentEdge
Using AI Code Generation
1[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"test-ScrollViews")]2 .usingSearchAction(grey_scrollToContentEdge(GREYContentEdgeTop), grey_swipeFastInDirection(kGREYDirectionUp))3 .performAction();4[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"test-ScrollViews")]5 .usingSearchAction(grey_scrollInDirection(kGREYDirectionUp, 200), grey_swipeFastInDirection(kGREYDirectionUp))6 .performAction();7[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"test-ScrollViews")]8 .usingSearchAction(grey_scrollToContentEdge(GREYContentEdgeTop), grey_swipeFastInDirection(kGREYDirectionUp))9 .performAction();10[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"test-ScrollViews")]11 .usingSearchAction(grey_scrollToContentEdge(GREYContentEdgeTop), grey_swipeFastInDirection(kGREYDirectionUp))12 .performAction();13[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"test-ScrollViews")]14 .usingSearchAction(grey_scrollToContentEdge(GREYContentEdgeTop), grey_swipeFastInDirection(kGREYDirectionUp))15 .performAction();16[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"test-ScrollViews")]17 .usingSearchAction(grey_scrollToContentEdge(GREYContentEdgeTop), grey_swipeFastInDirection(kGREYDirectionUp))18 .performAction();19[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"test-ScrollViews")]20 .usingSearchAction(grey_scrollToContentEdge(GREYContentEdgeTop), grey_swipeFastInDirection(kGREYDirectionUp))21 .performAction();
grey_scrollToContentEdge
Using AI Code Generation
1#define GREY_SCROLL_TO_EDGE(edge) [GREYActions grey_scrollToContentEdge:edge]2#define GREY_SCROLL_TO_EDGE_IN_DIRECTION(edge, direction) [GREYActions grey_scrollToContentEdge:edge inDirection:direction]3#define GREY_SCROLL_IN_DIRECTION(direction, amount) [GREYActions grey_scrollInDirection:direction amount:amount]4+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge;5+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge6 inDirection:(GREYDirection)direction;7+ (id<GREYAction>)grey_scrollInDirection:(GREYDirection)direction8 amount:(CGFloat)amount;9#import "GREYActions.h"10#import "GREYActionBlock.h"11#import "GREYElementInteraction.h"12+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge {13 return [self grey_scrollToContentEdge:edge inDirection:kGREYDirectionDown];14}15+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge16 inDirection:(GREYDirection)direction {17 constraints:grey_kindOfClass([UIScrollView class])18 performBlock:^BOOL(UIScrollView *element, NSError *__strong *errorOrNil) {19 return [element grey_scrollToContentEdge:edge inDirection:direction];20 }];21}22+ (id<GREYAction>)grey_scrollInDirection:(GREYDirection)direction23 amount:(CGFloat)amount {24 constraints:grey_kindOfClass([UIScrollView class])25 performBlock:^BOOL(UIScrollView *element, NSError *__strong *errorOrNil) {26 return [element grey_scrollInDirection:direction amount:amount];27 }];28}
grey_scrollToContentEdge
Using AI Code Generation
1[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"ScrollToEdge")]2 performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];3+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge;4+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge {5 constraints:grey_not(grey_systemAlertViewShown())6 performBlock:^BOOL (id element, NSError *__strong *errorOrNil) {7 UIScrollView *scrollView = nil;8 if ([element isKindOfClass:[UIScrollView class]]) {9 scrollView = element;10 } else if ([element isKindOfClass:[UIWebView class]]) {11 scrollView = [(UIWebView *)element scrollView];12 } else {13 element];14 NSDictionary *glossary = @{kErrorDetailElementKey : element};15 GREYPopulateErrorNotedOrLog(errorOrNil,16 glossary);17 return NO;18 }19 CGPoint contentOffset = scrollView.contentOffset;20 switch (edge) {21 contentOffset.y = -scrollView.contentInset.top;22 break;23 scrollView.contentInset.bottom;24 break;25 contentOffset.x = -scrollView.contentInset.left;26 break;27 scrollView.contentInset.right;28 break;29 }30 [scrollView setContentOffset:contentOffset animated:YES];31 return YES;32 }];33}34typedef NS_ENUM(NSInteger, GREYContentEdge) {35};36+ (id<
grey_scrollToContentEdge
Using AI Code Generation
1if (grey_scrollToContentEdge(UIGestureRecognizerDirectionLeft)) {2 NSLog(@"Scrolled to left edge");3} else {4 NSLog(@"Couldn't scroll to left edge");5}6+ (id)grey_scrollToContentEdge:(UIGestureRecognizerDirection)direction {7 constraints:grey_interactable()8 performBlock:^BOOL (id element, __strong NSError **errorOrNil) {9 if (![element isKindOfClass:[UIScrollView class]]) {10 NSString *errorDescription = @"Element is not a UIScrollView";11 *errorOrNil = GREYErrorMake(kGREYInteractionErrorDomain,12 errorDescription);13 return NO;14 }15 UIScrollView *scrollView = (UIScrollView *)element;16 CGPoint contentOffset = scrollView.contentOffset;17 CGSize contentSize = scrollView.contentSize;18 CGSize frameSize = scrollView.frame.size;19 switch (direction) {20 contentOffset.x = -scrollView.contentInset.left;21 break;22 contentOffset.x = contentSize.width - frameSize.width + scrollView.contentInset.right;23 break;24 contentOffset.y = -scrollView.contentInset.top;25 break;26 contentOffset.y = contentSize.height - frameSize.height + scrollView.contentInset.bottom;27 break;28 break;29 }30 [scrollView setContentOffset:contentOffset animated:YES];31 return YES;32 }];33}34#define GREY_SCROLL_TO_EDGE(edge) [GREYActions grey_scrollToContentEdge:edge]35#define GREY_SCROLL_TO_EDGE_IN_DIRECTION(edge, direction) [GREYActions grey_scrollToContentEdge:edge inDirection:direction]36#define GREY_SCROLL_IN_DIRECTION(direction, amount) [GREYActions grey_scrollInDirection:direction amount:amount]37+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge;38+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge39 inDirection:(GREYDirection)direction;40+ (id<GREYAction>)grey_scrollInDirection:(GREYDirection)direction41 amount:(CGFloat)amount;42#import "GREYActions.h"43#import "GREYActionBlock.h"44#import "GREYElementInteraction.h"45+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge {46 return [self grey_scrollToContentEdge:edge inDirection:kGREYDirectionDown];47}48+ (id<GREYAction>)grey_scrollToContentEdge:(GREYContentEdge)edge49 inDirection:(GREYDirection)direction {50 constraints:grey_kindOfClass([UIScrollView class])51 performBlock:^BOOL(UIScrollView *element, NSError *__strong *errorOrNil) {52 return [element grey_scrollToContentEdge:edge inDirection:direction];53 }];54}55+ (id<GREYAction>)grey_scrollInDirection:(GREYDirection)direction56 amount:(CGFloat)amount {57 constraints:grey_kindOfClass([UIScrollView class])58 performBlock:^BOOL(UIScrollView *element, NSError *__strong *errorOrNil) {59 return [element grey_scrollInDirection:direction amount:amount];60 }];61}
grey_scrollToContentEdge
Using AI Code Generation
1if (grey_scrollToContentEdge(UIGestureRecognizerDirectionLeft)) {2 NSLog(@"Scrolled to left edge");3} else {4 NSLog(@"Couldn't scroll to left edge");5}6+ (id)grey_scrollToContentEdge:(UIGestureRecognizerDirection)direction {7 constraints:grey_interactable()8 performBlock:^BOOL (id element, __strong NSError **errorOrNil) {9 if (![element isKindOfClass:[UIScrollView class]]) {10 NSString *errorDescription = @"Element is not a UIScrollView";11 *errorOrNil = GREYErrorMake(kGREYInteractionErrorDomain,12 errorDescription);13 return NO;14 }15 UIScrollView *scrollView = (UIScrollView *)element;16 CGPoint contentOffset = scrollView.contentOffset;17 CGSize contentSize = scrollView.contentSize;18 CGSize frameSize = scrollView.frame.size;19 switch (direction) {20 contentOffset.x = -scrollView.contentInset.left;21 break;22 contentOffset.x = contentSize.width - frameSize.width + scrollView.contentInset.right;23 break;24 contentOffset.y = -scrollView.contentInset.top;25 break;26 contentOffset.y = contentSize.height - frameSize.height + scrollView.contentInset.bottom;27 break;28 break;29 }30 [scrollView setContentOffset:contentOffset animated:YES];31 return YES;32 }];33}
Check out the latest blogs from LambdaTest on this topic:
Most test automation tools just do test execution automation. Without test design involved in the whole test automation process, the test cases remain ad hoc and detect only simple bugs. This solution is just automation without real testing. In addition, test execution automation is very inefficient.
There are times when developers get stuck with a problem that has to do with version changes. Trying to run the code or test without upgrading the package can result in unexpected errors.
Selenium, a project hosted by the Apache Software Foundation, is an umbrella open-source project comprising a variety of tools and libraries for test automation. Selenium automation framework enables QA engineers to perform automated web application testing using popular programming languages like Python, Java, JavaScript, C#, Ruby, and PHP.
The key to successful test automation is to focus on tasks that maximize the return on investment (ROI), ensuring that you are automating the right tests and automating them in the right way. This is where test automation strategies come into play.
The web development industry is growing, and many Best Automated UI Testing Tools are available to test your web-based project to ensure it is bug-free and easily accessible for every user. These tools help you test your web project and make it fully compatible with user-end requirements and needs.
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!