From ec5f519f0bf4d7547891da99f896a15e5c7496b3 Mon Sep 17 00:00:00 2001 From: fylyppo Date: Tue, 13 Feb 2024 14:42:54 +0100 Subject: [PATCH 1/3] Add NSLog to tests --- LandmarksUITests/LandmarksUITests.m | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/LandmarksUITests/LandmarksUITests.m b/LandmarksUITests/LandmarksUITests.m index 87fc9a7..44b4938 100644 --- a/LandmarksUITests/LandmarksUITests.m +++ b/LandmarksUITests/LandmarksUITests.m @@ -7,18 +7,25 @@ @interface LandmarksUITests : XCTestCase @implementation LandmarksUITests - (void)testFavorite { + NSLog(@"TESTLOG 1"); + XCUIApplication *app = [[XCUIApplication alloc] init]; [app launch]; + NSLog(@"TESTLOG 2"); + XCUIElementQuery *element = [[app descendantsMatchingType:XCUIElementTypeAny] matchingIdentifier:@"Turtle Rock"]; [[element firstMatch] tap]; } - (void)testFavoriteUsingPredicates { + NSLog(@"TESTLOG 3"); XCUIApplication *app = [[XCUIApplication alloc] init]; [app launch]; + NSLog(@"TESTLOG 4"); + // Open landmark page NSPredicate *predicate = [NSPredicate predicateWithFormat:@"label = %@", @"Turtle Rock"]; @@ -45,7 +52,10 @@ - (void)testFavoriteUsingPredicates { matchingPredicate:predicate]; XCUIElement *element = query.allElementsBoundByIndex.firstObject; + NSLog(@"TESTLOG 5"); + XCTAssertTrue(element.exists); + NSLog(@"TESTLOG 6"); } @end From cd51d539082d4fea4e65e914156d7059b5d5eedd Mon Sep 17 00:00:00 2001 From: fylyppo Date: Tue, 13 Feb 2024 14:43:25 +0100 Subject: [PATCH 2/3] Create script to build and schedule test builds on BrowserStack --- bs_ios | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100755 bs_ios diff --git a/bs_ios b/bs_ios new file mode 100755 index 0000000..274c212 --- /dev/null +++ b/bs_ios @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +set -euo pipefail + +# bs_ios uploads app binaries for UI testing on BrowserStack. + +if [ -z "${BROWSERSTACK_CREDS:-}" ]; then + echo "Error: missing BROWSERSTACK_CREDS env var" >&2 + exit 1 +fi + +if [ -z "${PROJECT_NAME:-}" ]; then + default_project="Unnamed iOS project" + echo 1>&2 "PROJECT_NAME not set, using default: $default_project" + PROJECT_NAME="$default_project" +fi + +if [ -z "${IOS_DEVICES:-}" ]; then + default_devices="[\"iPhone 14-16\"]" + echo 1>&2 "IOS_DEVICES not set, using default: $default_devices" + IOS_DEVICES="$default_devices" +fi + +if [ -z "${TEST_CASE_TIMEOUT:-}" ]; then + test_case_timeout=180 + echo 1>&2 "TEST_CASE_TIMEOUT not set, using default: $test_case_timeout" + TEST_CASE_TIMEOUT="$test_case_timeout" +fi + +if [ -z "${BUILD_TAG:-}" ]; then + BUILD_TAG="" + echo 1>&2 "BUILD_TAG not set" +fi + +printf 1>&2 "\n" + +rm -rf ./Build + +xcodebuild build-for-testing -scheme Landmarks -destination 'generic/platform=iOS' -derivedDataPath ./Build + +printf 1>&2 "\nZipping test files...\n" + +cd Build/Build/Products/Debug-iphoneos + +mkdir -p Payload +cp -r Landmarks.app Payload +zip -r Landmarks.ipa Payload >/dev/null + +mv ../Landmarks_TestPlan_iphoneos16.0-arm64.xctestrun . + +zip --symlinks -r LandmarksUITests-Runner.zip Landmarks_TestPlan_iphoneos16.0-arm64.xctestrun LandmarksUITests-Runner.app + +printf 1>&2 "Completed zipping\n" + +printf 1>&2 "\nUploading app...\n" + +# https://www.browserstack.com/docs/app-automate/api-reference/xcuitest/apps#upload-an-app +app_url="$( + curl -u "$BROWSERSTACK_CREDS" \ + -X POST "https://api-cloud.browserstack.com/app-automate/xcuitest/v2/app" \ + -F "file=@$PWD/Landmarks.ipa" | jq --raw-output .app_url +)" + +echo 1>&2 "Uploaded app, url: $app_url" + +printf 1>&2 "\nUploading test...\n" + +# https://www.browserstack.com/docs/app-automate/api-reference/xcuitest/tests#upload-a-test-suite +test_url="$( + curl -u "$BROWSERSTACK_CREDS" \ + -X POST "https://api-cloud.browserstack.com/app-automate/xcuitest/v2/test-suite" \ + -F "file=@$PWD/LandmarksUITests-Runner.zip" | + jq --raw-output .test_suite_url +)" + +echo 1>&2 "Uploaded test, url: $test_url" + +printf 1>&2 "\nScheduling test execution...\n" + +# https://www.browserstack.com/docs/app-automate/api-reference/xcuitest/builds#execute-a-build +if ! run_response="$( + curl -u "$BROWSERSTACK_CREDS" \ + -X POST "https://api-cloud.browserstack.com/app-automate/xcuitest/v2/xctestrun-build" \ + -H "Content-Type: application/json" \ + --data-binary @- <&2 "Error: failed to schedule test execution" + echo 1>&2 "$run_response" + exit 1 +fi + +printf 1>&2 "\nScheduled test execution\n" +echo 1>&2 "$run_response" + +build_id="$(echo "$run_response" | jq --raw-output .build_id)" +echo "$build_id" From 790105965fb8970053bd2c1287c9b86a53ac8829 Mon Sep 17 00:00:00 2001 From: fylyppo Date: Mon, 6 May 2024 10:03:59 +0200 Subject: [PATCH 3/3] Create test to reproduce issue --- .DS_Store | Bin 0 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 19186 bytes LandmarksUITests/LandmarksUITests.m | 67 +++++------------- 3 files changed, 18 insertions(+), 49 deletions(-) create mode 100644 .DS_Store create mode 100644 Landmarks.xcodeproj/project.xcworkspace/xcuserdata/fylyppo.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..00a35399fdd7fe5c130e6a874ae05381fe591537 GIT binary patch literal 6148 zcmeHK%Sr=55Uhz25(Ek8!Q*^^kc0O%tT%7_1DdQvbYDai4<7cDo=#z)Tu|n?2@JU;|CTJBy=k22Sye1!}Tx&~Vpl+!f1dwy4V{7W#g+J+rLS zbY9eRGDa`2$Nuo+?R*z@{tI?2TV7IQ_EI z4#kD9^Zh=g!zB@IGzCn7O$GMi<3#TNi=X@dO_DvC0;WK(6mY{dOJ^)e@77Lna@TtL r6NNov>8dL2)mOiW>$97=;9rpyE2Wo84=7yVwd? zYqfT@o832SZLO`=rCMvXwzam}+I{bLCYOMS?c4YL_j~@&_dIWTYLa_rIWu#9zd7g3 zoQC#Rr`KmRzKbwo5Q{j(qaYNFhE7dc;P7~zZdYB3-P1V73BPJmeD3zCDei{3jz*t1 z65-3%)=MQ5s>eDy9Zki(h2B9SXh?0f&+c;&{Gbfqi$YNtibZiqfwGVu8ITc~kQrH! z6=fqE%0ank0-A^>p$kzJszx=a7EMM|kR3IkM%0Ab(R}1VUgSfI&~mf_U5YM4SE8%X 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

G za777jeTk3Hj?&llRqlH&N>pKQbGAb0UVe5{^whJJ#%e%K&efyyJSk{e;A`@aFYBDr ze@i=R{i+FHCR>0S-<1=|3pT+A1yh^~=3-|^B-$?Z~2Jk=d6rjfGqw7VJ76!hUOz*qW%PNCk zO>Cz*2Cz8BLA81hAm|0&jy8HVSALux#5 zvlG%#rHat7sOW^m;TgvK3r1*07FUiLJ8pdSl&Lf7dlTxyY5GSbq{Q?NR7{(JTP4Ll z;O2%7xMl%cTpVHRsyiSb#nI$w+9QvNh*iW>+2;*Rzw3%4T$d8E;i6z$sDQic`&8e30el&yu2>GHl+OqBL>RWS2`xa0q1B z#e#zC=_!<>+J8`8TS@yUfeRvgA~JPZdIOxOiT(CpAn4O&<+*Rp8emK$!Iy9(gpSOV z9p7WNSjAMn9$QW>34=hmoJ0YX#U|(=`YJd|1l;E zxbH2!6w&`iiljliCrq4l;lIv_npD-75d}4BYR}D#sF_>^Ywb^q0Ol0ON+;bv6sS=* z4QTw_+3lWQb)KhCdgiQN-RPcK1wUs)K3(Kl+6K2PsLj^h0M*a)+@G|ggbN(QA(c7@ zlKI9#`gApNqYktbQlzg&w?Sg`8gw_LMLz`TJ1;{z#A}fC@CIZ&ybG7~X%f%xcnBms zE8t2vy%3%ZR~kn^63h_Yayli27D7<4Qb7HLSpk;{5XCOQk8##J5Rsi zKOj+g2ouVLL#lElTsewitjq*v5+o&0VHzMEc@f-AxCD}qS3}D2I_7caY340B3O^2M z#a}VsFh9Z(nN-y4z9gZ>US8?_U{eKrm*1x0XY#XV_E|JwXW4t;Q9W7)Q%HXWXvogb zfm{B-p^bbKU(7f2Eq*3lE8s35Qvr7ixMw}@WD5Ctd@EcMDirWKvQ@xfGp~ocLR%@l z4*P2!q}uf_3xP~fDE+TnqJ^q`kp1y5OVW!p{*s!a5OHq&rVziN*AyClPsk@=3W1{3 z!C|b!(`4^Vvip+E=6s_K6h(oCAssS7f@mQq$z;gyn#Dc@dDbsOhV?%7FhuN*L$vO5 z_7wXidj@i-4crKBJU5ZMkgMiuxhY&7WKPfIT#zU2;e6Zz$d+ErE#;PTgj>zs%k78k z=30&{IL%f_4V&3VJ7KPtd`j_k%tN`Y`BNFdwW4&J4~C zE)FgYE)O0RTp3&yToXJwcxv#p;2FW*;FZB^gP#uG9{hUnj^H71*M~kB`b_Bap)ZEM61pvPd*~OT--Ui3`ePUllZM5Hsl&8k*cd*Y=7)L1I>Hu*Ee%^9M#5HyZ4G-Z?1Qim!;Xa=5BntSMA*r&FTzfTeHHd~*tg-K z;o;$ua9Ma%xI8>IToE20o*1qUPY&0FSA=`RFAZN6{%H6c;b$U(BQhfLBF0Bdi*Q8< z5f?{X8nH5BRm7bUT@jljo{ZQUu`A+0#G#185l14vi1;bumx$jY{*Yh^E8!)Pl4wbc zBu=7~BuG?}B#BirMlw~>B)LR#ndC;vYRT=AJ0)F`9?3nDdnM0Ec1aFM4oMD6jsRCC zNQ8H zs>qti$&s@oosq7{C6Oy5uaCSj^5)1}BTq;E5EUL38KsRfMU99mh$@OAQCCFW9Cc^Z zhN!JkFGrn@`X*Wxof&P3E{raYE{!gao)BFVT^HREeNXfQ(XU4Dh&~#9GWt~Xm(gdU zf0oPTv2ukxUp_)!ATN@a$jjsv^3n1!@SM>pw#Hr&dqeEa zvA4$F7TX=WDRy)0gRu|CJ{tR2>=Ut1#cqpzBX(!(uGn{D_r)HFJsA62oH8ywP9JBC zGsjuuE{Gc$R~T0uR~pwEcURo=aogke#+`^e8TU=x&vAb!LKJd^R*|8wD2f#2icyM6 z#RSD9MU|pPF5Q@WK)mCKbxd6Duu<@L%Nl{YKz zR^G3CK>3jJ5#{sB?aCd>HSEQUs+Fo$s+(1}s%}%=q1vE&Q1!6tQPpFrXH?IrUQoTH zdPVh?YQO5Z>T}g8)t9O>svlK9tA17eu14xeb-Y@uE>)MSN2x2-W7Xr;6V(^0tJSsY zDe5})boEU2BK2bRQuPY;Me0k`E7e!3uTig3->AMteVh6Y^&0h)>b>e?Nleo4qzjU! zCbcGAoU|tC!K7nJKP5BCp~>ONl4MzORI)sISaM2oTCz6ziR4$3ww?<24gC7iy|CwVGL)*_uX8v&N~Jr&**~tXZmAo}x<0 zOvy?yq?l56ryNQ7Hs$-2A5(r#`8DPDRFul3a;ZV7A*qR}>eS>^O=@atdg}1h%+#z@ zW2!mTntEYsd+JT8kEb3?Lun~#rD+XmE7C4cyDIIPwCmDVr*)RK)W=3XKrXkam zIW6<*%*~mPXTF@dFY`d=(ah62tYdXyI*Bepm#ow1(sY?Rz0Rbw=t^`Gbxpb!-CSLp zu3hKVEzou9mg-jMF4EnqyIpsu?k?S0U5{?PZi8;4ZnN$|-NU-Kbf>apS(dCRSe*N5ms_2K#$y;?s^pQ2CK57%ev!Bx2=^rQ6S^b_?}`WpRw{Z0BV z{d)a<`c3+W^pENv*FUL$O}|6GU;lyrsQ$SAQ~hcESNd=C-|K%gC=6o_KEpD@m4-Ej zyA2x*j~TWbb{O^;J~Vu6_|$OH@TK8v!*_-sj6udIqt=)Sx4BFZ+R8EJ8%G+8jHSj3 z<8tICo#{o>4%1H4+os*7 zL#E@VPfeehzA&9OeP#OE^oN-<2b+hQCFV%8+#GARnx~kX%uaKw*=6>c7nnQEOUzfA zuQA_l?lP}4-)r7ze%QRl{J8lk^V8;2mIzCZrN}bgGTYK%nP*vKxyo{lEN9ZjH3YTUFL1>oBXqYPMRf zIo5pZ2y3}@v~`SioVCt6+uCStwmPltRu=dZv%|Bc*-_as*>Ty! zvNN+S*(0(Gvqxu7%&y6{XE$ZHWY5iR%XVjXW?z(jb@p}HZ)We!{xth^_767BHpCWY zlh~qdu{NbG!B%Ix#df!CgKd*-i|tw43$~rMW44cNCv2bFPTS7dzP0^e``Pwe4$6_| z#O5e-5^_{I$vG)G={XrWSvkfWbI!<|nw++r%W`hZc_`=AoLxD`bAHW@$W6+%=eFc7 z%e^G`y4=;dx8>fEyCL`C+%36J$z{{?#kVr`)=;3ypTLi-sHR)c};oE zdG5Rgd7XJn^H$^udDrIMoVPmfj=a0_?#bJbw<+&|yod7M%MZ@C#p|!BC@Z!SFg^w3LU%0*Sjb5jM5kL9PUT>oJqwvH30acEh AqyPW_ literal 0 HcmV?d00001 diff --git a/LandmarksUITests/LandmarksUITests.m b/LandmarksUITests/LandmarksUITests.m index 44b4938..8ab06cd 100644 --- a/LandmarksUITests/LandmarksUITests.m +++ b/LandmarksUITests/LandmarksUITests.m @@ -6,56 +6,25 @@ @interface LandmarksUITests : XCTestCase @implementation LandmarksUITests -- (void)testFavorite { - NSLog(@"TESTLOG 1"); +- (void)testHomeScreen { + + XCUIApplication *app = [[XCUIApplication alloc] init]; + [app launch]; + + XCUIElementQuery *element = [[app descendantsMatchingType:XCUIElementTypeAny] + matchingIdentifier:@"Turtle Rock"]; + [[element firstMatch] tap]; + + // Simulate pressing the home button + [[XCUIDevice sharedDevice] pressButton:XCUIDeviceButtonHome]; + + sleep(10); + + // Return to the app + [app activate]; + + sleep(2); - XCUIApplication *app = [[XCUIApplication alloc] init]; - [app launch]; - - NSLog(@"TESTLOG 2"); - - XCUIElementQuery *element = [[app descendantsMatchingType:XCUIElementTypeAny] - matchingIdentifier:@"Turtle Rock"]; - [[element firstMatch] tap]; -} - -- (void)testFavoriteUsingPredicates { - NSLog(@"TESTLOG 3"); - XCUIApplication *app = [[XCUIApplication alloc] init]; - [app launch]; - - NSLog(@"TESTLOG 4"); - - // Open landmark page - NSPredicate *predicate = - [NSPredicate predicateWithFormat:@"label = %@", @"Turtle Rock"]; - XCUIElementQuery *query = [[app descendantsMatchingType:XCUIElementTypeAny] - matchingPredicate:predicate]; - [[query firstMatch] tap]; - - // Mark landmark as favorite - predicate = [NSPredicate predicateWithFormat:@"identifier = %@", @"favorite"]; - query = [[app descendantsMatchingType:XCUIElementTypeAny] - matchingPredicate:predicate]; - [[query firstMatch] tap]; - - // Go to landmarks list - predicate = [NSPredicate predicateWithFormat:@"label = %@", @"Landmarks"]; - query = [[app descendantsMatchingType:XCUIElementTypeAny] - matchingPredicate:predicate]; - [[query firstMatch] tap]; - - // Assert that landmark is favorited - predicate = [NSPredicate - predicateWithFormat:@"label = %@", @"Turtle Rock, favorited"]; - query = [[app descendantsMatchingType:XCUIElementTypeAny] - matchingPredicate:predicate]; - XCUIElement *element = query.allElementsBoundByIndex.firstObject; - - NSLog(@"TESTLOG 5"); - - XCTAssertTrue(element.exists); - NSLog(@"TESTLOG 6"); } @end