From 70aa952223f58d310e8c41afd5dbb47cd3490c0e Mon Sep 17 00:00:00 2001 From: Rocco Salvetti <38426041+PimySoft@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:00:14 +0100 Subject: [PATCH 1/3] Rocco_XCUITests_KickStart Adding Identifiers, Labels and Values where necessary --- .DS_Store | Bin 0 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 45633 bytes .../xcschemes/xcschememanagement.plist | 14 ++++++++++ Wiggles-iOS/Details/DetailsView.swift | 25 ++++++++++++++++++ Wiggles-iOS/Home/HomeView.swift | 3 +++ Wiggles-iOS/Home/HomeViewModel.swift | 1 + 6 files changed, 43 insertions(+) create mode 100644 .DS_Store create mode 100644 Wiggles-iOS.xcodeproj/project.xcworkspace/xcuserdata/pimysoft.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Wiggles-iOS.xcodeproj/xcuserdata/pimysoft.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ceb0e8147dbb89a922f9ac9105c9bb8b1155b4b7 GIT binary patch literal 6148 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 literal 0 HcmV?d00001 diff --git a/Wiggles-iOS.xcodeproj/xcuserdata/pimysoft.xcuserdatad/xcschemes/xcschememanagement.plist b/Wiggles-iOS.xcodeproj/xcuserdata/pimysoft.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..463e98e --- /dev/null +++ b/Wiggles-iOS.xcodeproj/xcuserdata/pimysoft.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Wiggles-iOS.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Wiggles-iOS/Details/DetailsView.swift b/Wiggles-iOS/Details/DetailsView.swift index f52ded4..d772c91 100644 --- a/Wiggles-iOS/Details/DetailsView.swift +++ b/Wiggles-iOS/Details/DetailsView.swift @@ -26,13 +26,21 @@ struct DetailsView: View { ZStack(alignment: .top) { Image(viewModel.model.image).resizable() .frame(height: 400).frame(maxWidth: .infinity) + .accessibilityIdentifier("Dog Picture") + .accessibilityLabel("Dog Picture") HStack { Button(action: { self.presentationMode.wrappedValue.dismiss() }, label: { Image(IMAGE_BACK_ICON).resizable().frame(width: 34, height: 34) }) + .accessibilityIdentifier("Back") + .accessibilityLabel("List Page") Spacer() Button(action: { viewModel.favouriteMethod() }, label: { Image(IMAGE_FAV_ICON).resizable().frame(width: 26, height: 26) }) + .accessibilityIdentifier("Fav Button") + .accessibilityLabel("Add To Favourites") }.padding(.horizontal, 24).padding(.top, 46) + + } Group { HStack { @@ -41,12 +49,19 @@ struct DetailsView: View { Spacer() GenderView(isMale: viewModel.model.gender == "male") }.padding(.vertical, 8) + .accessibilityIdentifier("Gender") + .accessibilityLabel("Gender") + .accessibilityValue(viewModel.model.gender) + HStack(alignment: .center) { HStack(alignment: .center, spacing: 2) { Image(IMAGE_LOC_ICON).resizable().frame(width: 24, height: 24) Text("\(viewModel.model.location) away").modifier(SailecFont(.regular, size: 14)) .foregroundColor(Color.text_primary_color).padding(.top, 2) + .accessibilityIdentifier("Distance") + .accessibilityLabel("Distance") + .accessibilityValue(viewModel.model.location) } Spacer() Text("\(viewModel.model.age) yrs | \(viewModel.model.about)").modifier(SailecFont(.regular, size: 14)) @@ -58,6 +73,9 @@ struct DetailsView: View { .foregroundColor(Color.text_primary_color) Spacer() }.padding(.leading, 6).padding(.top, 2) + .accessibilityIdentifier("Time") + .accessibilityLabel("Post date") + .accessibilityValue("12 min ago") VStack(spacing: 16) { HStack { @@ -68,6 +86,7 @@ struct DetailsView: View { Text(viewModel.story).modifier(SailecFont(.regular, size: 16)) .foregroundColor(Color.text_primary_color) }.padding(.vertical, 16) + .accessibilityIdentifier("Dog Story") VStack(spacing: 16) { HStack { @@ -86,6 +105,8 @@ struct DetailsView: View { HStack { Text("Owner Info").modifier(SailecFont(.bold, size: 18)) .foregroundColor(Color.text_primary_color) + .accessibilityIdentifier("Owner") + .accessibilityLabel("Owner") Spacer() } DetailsOwnerView(image: viewModel.model.owner.image, name: viewModel.model.owner.name, bio: viewModel.model.owner.bio, messageMethod: viewModel.messageMethod) @@ -96,6 +117,8 @@ struct DetailsView: View { .frame(height: 50).frame(maxWidth: .infinity) .background(Color.main_color).cornerRadius(8) .padding(.vertical, 24) + .accessibilityIdentifier("Adopt Me") + .accessibilityLabel("Adopt Me") }.padding(.horizontal, 16).padding(.top, 8) }.background(Color.primary_color) @@ -129,6 +152,8 @@ struct DetailsOwnerView: View { Button(action: { self.messageMethod() }, label: { Image(IMAGE_MSG_ICON).resizable().frame(width: 20, height: 20) }) .frame(width: 45, height: 45).background(Color.main_color).cornerRadius(25) + .accessibilityIdentifier("Contact Owner") + .accessibilityLabel("Contact Owner") } } } diff --git a/Wiggles-iOS/Home/HomeView.swift b/Wiggles-iOS/Home/HomeView.swift index e069271..14a1286 100644 --- a/Wiggles-iOS/Home/HomeView.swift +++ b/Wiggles-iOS/Home/HomeView.swift @@ -21,6 +21,8 @@ struct HomeView: View { VStack(alignment: .leading) { Text("Hey Sameer,").modifier(SailecFont(.bold, size: 24)) .foregroundColor(Color.text_primary_color).padding(.top, 16) + .accessibilityIdentifier("User Name") + Text("Adopt a new friend near you!").modifier(SailecFont(.regular, size: 18)) .foregroundColor(Color.text_primary_color).padding(.top, 4) } @@ -34,6 +36,7 @@ struct HomeView: View { HomeListModelView(image: model.image, name: model.name, age: model.age, about: model.about, location: model.location, gender: model.gender).padding(.bottom, 4) }) + .accessibilityIdentifier("Dog Card") } } Spacer() diff --git a/Wiggles-iOS/Home/HomeViewModel.swift b/Wiggles-iOS/Home/HomeViewModel.swift index 78d4022..4d3b597 100644 --- a/Wiggles-iOS/Home/HomeViewModel.swift +++ b/Wiggles-iOS/Home/HomeViewModel.swift @@ -14,4 +14,5 @@ class HomeViewModel: ObservableObject { init() { fetchDogsList() } func fetchDogsList() { dogsList = DogData.dogs } + } From d2aa901260e1c6405dcb650ab2bd84638814118c Mon Sep 17 00:00:00 2001 From: Rocco Salvetti <38426041+PimySoft@users.noreply.github.com> Date: Thu, 17 Apr 2025 18:42:31 +0100 Subject: [PATCH 2/3] Implement POM Implement base POM and base test --- .DS_Store | Bin 6148 -> 6148 bytes Wiggles-iOS.xcodeproj/project.pbxproj | 136 +++++++++++++++++- .../UserInterfaceState.xcuserstate | Bin 45633 -> 54704 bytes Wiggles-iOS/Details/DetailsView.swift | 17 ++- .../PageObjects/PuppyDetailsPage.swift | 113 +++++++++++++++ .../PageObjects/PuppyListingPage.swift | 21 +++ Wiggles-iOSUITests/WiggleUITests.swift | 32 +++++ 7 files changed, 311 insertions(+), 8 deletions(-) create mode 100644 Wiggles-iOSUITests/PageObjects/PuppyDetailsPage.swift create mode 100644 Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift create mode 100644 Wiggles-iOSUITests/WiggleUITests.swift diff --git a/.DS_Store b/.DS_Store index ceb0e8147dbb89a922f9ac9105c9bb8b1155b4b7..1357ce01370249b8a0b3a95a5c81e0f3e2563e70 100644 GIT binary patch delta 59 zcmZoMXffE}&cw{9zIyUGCcViOOgyZYYQJhNoP3(eaPlrBo*ffo!Dd0`Z!8lV*fz6s H{N)D#h7T33 delta 59 zcmZoMXffE}&cw{%`+xE|CcViOOgyZU$|T(zC!c0AoV*K(XUD|Quvw7#8_UE7w$1Du GfB6AeeG};b diff --git a/Wiggles-iOS.xcodeproj/project.pbxproj b/Wiggles-iOS.xcodeproj/project.pbxproj index 52ef292..03c8870 100644 --- a/Wiggles-iOS.xcodeproj/project.pbxproj +++ b/Wiggles-iOS.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -27,6 +27,16 @@ 73E4B4D925EE75B10020C282 /* DetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73E4B4D825EE75B10020C282 /* DetailsViewModel.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + D667F6782DB1425500FB6437 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 73CEC9D825EE0A8F008362CE /* Project object */; + proxyType = 1; + remoteGlobalIDString = 73CEC9DF25EE0A8F008362CE; + remoteInfo = "Wiggles-iOS"; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ 73CEC9E025EE0A8F008362CE /* Wiggles-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Wiggles-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 73CEC9E325EE0A8F008362CE /* Wiggles_iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Wiggles_iOSApp.swift; sourceTree = ""; }; @@ -48,8 +58,13 @@ 73CECA2F25EE3A76008362CE /* DogData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DogData.swift; sourceTree = ""; }; 73CECA3425EE416C008362CE /* DetailsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsView.swift; sourceTree = ""; }; 73E4B4D825EE75B10020C282 /* DetailsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsViewModel.swift; sourceTree = ""; }; + D667F6722DB1425500FB6437 /* Wiggles-iOSUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Wiggles-iOSUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + D667F6732DB1425500FB6437 /* Wiggles-iOSUITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "Wiggles-iOSUITests"; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 73CEC9DD25EE0A8F008362CE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -58,6 +73,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D667F66F2DB1425500FB6437 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -65,6 +87,7 @@ isa = PBXGroup; children = ( 73CEC9E225EE0A8F008362CE /* Wiggles-iOS */, + D667F6732DB1425500FB6437 /* Wiggles-iOSUITests */, 73CEC9E125EE0A8F008362CE /* Products */, ); sourceTree = ""; @@ -73,6 +96,7 @@ isa = PBXGroup; children = ( 73CEC9E025EE0A8F008362CE /* Wiggles-iOS.app */, + D667F6722DB1425500FB6437 /* Wiggles-iOSUITests.xctest */, ); name = Products; sourceTree = ""; @@ -179,18 +203,46 @@ productReference = 73CEC9E025EE0A8F008362CE /* Wiggles-iOS.app */; productType = "com.apple.product-type.application"; }; + D667F6712DB1425500FB6437 /* Wiggles-iOSUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = D667F67C2DB1425500FB6437 /* Build configuration list for PBXNativeTarget "Wiggles-iOSUITests" */; + buildPhases = ( + D667F66E2DB1425500FB6437 /* Sources */, + D667F66F2DB1425500FB6437 /* Frameworks */, + D667F6702DB1425500FB6437 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D667F6792DB1425500FB6437 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + D667F6732DB1425500FB6437 /* Wiggles-iOSUITests */, + ); + name = "Wiggles-iOSUITests"; + packageProductDependencies = ( + ); + productName = "Wiggles-iOSUITests"; + productReference = D667F6722DB1425500FB6437 /* Wiggles-iOSUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 73CEC9D825EE0A8F008362CE /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1240; + LastSwiftUpdateCheck = 1630; LastUpgradeCheck = 1240; TargetAttributes = { 73CEC9DF25EE0A8F008362CE = { CreatedOnToolsVersion = 12.4; }; + D667F6712DB1425500FB6437 = { + CreatedOnToolsVersion = 16.3; + LastSwiftMigration = 1630; + TestTargetID = 73CEC9DF25EE0A8F008362CE; + }; }; }; buildConfigurationList = 73CEC9DB25EE0A8F008362CE /* Build configuration list for PBXProject "Wiggles-iOS" */; @@ -207,6 +259,7 @@ projectRoot = ""; targets = ( 73CEC9DF25EE0A8F008362CE /* Wiggles-iOS */, + D667F6712DB1425500FB6437 /* Wiggles-iOSUITests */, ); }; /* End PBXProject section */ @@ -224,6 +277,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D667F6702DB1425500FB6437 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -247,8 +307,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D667F66E2DB1425500FB6437 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + D667F6792DB1425500FB6437 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 73CEC9DF25EE0A8F008362CE /* Wiggles-iOS */; + targetProxy = D667F6782DB1425500FB6437 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 73CEC9ED25EE0A92008362CE /* Debug */ = { isa = XCBuildConfiguration; @@ -410,6 +485,54 @@ }; name = Release; }; + D667F67A2DB1425500FB6437 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "PimySoft.Wiggles-iOSUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = "Wiggles-iOS"; + }; + name = Debug; + }; + D667F67B2DB1425500FB6437 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "PimySoft.Wiggles-iOSUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = "Wiggles-iOS"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -431,6 +554,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + D667F67C2DB1425500FB6437 /* Build configuration list for PBXNativeTarget "Wiggles-iOSUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D667F67A2DB1425500FB6437 /* Debug */, + D667F67B2DB1425500FB6437 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 73CEC9D825EE0A8F008362CE /* Project object */; diff --git a/Wiggles-iOS.xcodeproj/project.xcworkspace/xcuserdata/pimysoft.xcuserdatad/UserInterfaceState.xcuserstate b/Wiggles-iOS.xcodeproj/project.xcworkspace/xcuserdata/pimysoft.xcuserdatad/UserInterfaceState.xcuserstate index 19c03654cb5b15b530c3371c97689cba82746503..04b4beb891323df652bec3bedc2f9ef3a68b0a49 100644 GIT binary patch literal 54704 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±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 Bool { + return puppyName.exists + } + + func dogPictureExists() -> Bool { + return dogPicture.exists + } + + func genderExists() -> Bool { + return gender.exists + } + + func distanceExists() -> Bool { + return distance.exists + } + + func timeExists() -> Bool { + return time.exists + } + + func ownerPictureExists() -> Bool { + return ownerPicture.exists + } + + func ownerNameExists() -> Bool { + return ownerName.exists + } + + func ownerBioExists() -> Bool { + return ownerBio.exists + } + + func contactButtonExists() -> Bool { + return contactButton.exists + } + + func adoptMeButtonExists() -> Bool { + return adoptMeButton.exists + } + + + func tapFavorite() { + favoriteButton.tap() + } + + func tapAdoptMe() { + adoptMeButton.tap() + } + + func goBack() { + backButton.tap() + } +} diff --git a/Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift b/Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift new file mode 100644 index 0000000..7e83ae4 --- /dev/null +++ b/Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift @@ -0,0 +1,21 @@ +import XCTest + +class PuppyListingPage { + let app: XCUIApplication + + init(app: XCUIApplication) { + self.app = app + } + + var puppyCards: XCUIElementQuery { + return app.buttons.matching(identifier: "Dog Card") + } + + func tapFirstPuppy() { + puppyCards.element(boundBy: 0).tap() + } + + func isLoaded() -> Bool { + return puppyCards.count > 0 + } +} diff --git a/Wiggles-iOSUITests/WiggleUITests.swift b/Wiggles-iOSUITests/WiggleUITests.swift new file mode 100644 index 0000000..441294b --- /dev/null +++ b/Wiggles-iOSUITests/WiggleUITests.swift @@ -0,0 +1,32 @@ +import XCTest + +class WigglesUITests: XCTestCase { + + let app = XCUIApplication() + + override func setUp() { + super.setUp() + continueAfterFailure = false + app.launch() + } + + func testNavigationToPDPAndBack() { + let plp = PuppyListingPage(app: app) + XCTAssertTrue(plp.isLoaded()) + plp.tapFirstPuppy() + let pdp = PuppyDetailsPage(app: app) + XCTAssertTrue(pdp.puppyNameExists()) + XCTAssertTrue(pdp.dogPictureExists()) + XCTAssertTrue(pdp.genderExists()) + XCTAssertTrue(pdp.distanceExists()) + XCTAssertTrue(pdp.timeExists()) + XCTAssertTrue(pdp.ownerPictureExists()) + XCTAssertTrue(pdp.ownerNameExists()) + XCTAssertTrue(pdp.ownerBioExists()) + XCTAssertTrue(pdp.contactButtonExists()) + XCTAssertTrue(pdp.adoptMeButtonExists()) + pdp.tapFavorite() + pdp.goBack() + XCTAssertTrue(plp.isLoaded()) + } +} From e1147ece5c98efec2062294db3d492ec03b2ab77 Mon Sep 17 00:00:00 2001 From: Rocco Salvetti <38426041+PimySoft@users.noreply.github.com> Date: Thu, 17 Apr 2025 22:00:06 +0100 Subject: [PATCH 3/3] Finalising and polishing Finalising and polishing the UI Test --- .../UserInterfaceState.xcuserstate | Bin 54704 -> 56817 bytes .../PageObjects/PuppyDetailsPage.swift | 115 +++++------------- .../PageObjects/PuppyListingPage.swift | 26 ++-- Wiggles-iOSUITests/WiggleUITests.swift | 19 +-- 4 files changed, 54 insertions(+), 106 deletions(-) diff --git a/Wiggles-iOS.xcodeproj/project.xcworkspace/xcuserdata/pimysoft.xcuserdatad/UserInterfaceState.xcuserstate b/Wiggles-iOS.xcodeproj/project.xcworkspace/xcuserdata/pimysoft.xcuserdatad/UserInterfaceState.xcuserstate index 04b4beb891323df652bec3bedc2f9ef3a68b0a49..20f78edeb7dcb64965126ae7b379eea32cedea76 100644 GIT binary patch delta 23509 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 Y)ZElNsrT-kWSN=w?6dZs|2MVlKev*tqyPW_ diff --git a/Wiggles-iOSUITests/PageObjects/PuppyDetailsPage.swift b/Wiggles-iOSUITests/PageObjects/PuppyDetailsPage.swift index b39b6f5..059cd8f 100644 --- a/Wiggles-iOSUITests/PageObjects/PuppyDetailsPage.swift +++ b/Wiggles-iOSUITests/PageObjects/PuppyDetailsPage.swift @@ -3,102 +3,45 @@ import XCTest class PuppyDetailsPage { let app: XCUIApplication + // MARK: - Init + init(app: XCUIApplication) { self.app = app } - var backButton: XCUIElement { - return app.buttons["Back"] - } + // MARK: - UI Elements - var favoriteButton: XCUIElement { - return app.buttons["Fav Button"] - } - var dogPicture: XCUIElement { - return app.images["Dog Picture"] - } - - var gender: XCUIElement { - return app.staticTexts["Gender"] - } + var backButton: XCUIElement { app.buttons["Back"] } + var favoriteButton: XCUIElement { app.buttons["Fav Button"] } + var dogPicture: XCUIElement { app.images["Dog Picture"] } + var gender: XCUIElement { app.staticTexts["Gender"] } + var distance: XCUIElement { app.staticTexts["Distance"] } + var time: XCUIElement { app.staticTexts["Time"] } + var dogStory: XCUIElement { app.staticTexts["Dog Story"] } + var ownerPicture: XCUIElement { app.images["Owner Picture"] } + var ownerName: XCUIElement { app.staticTexts["Owner Name"] } + var ownerBio: XCUIElement { app.staticTexts["Owner Bio"] } + var contactButton: XCUIElement { app.buttons["Contact Owner"] } + var adoptMeButton: XCUIElement { app.buttons["Adopt Me"] } + var puppyName: XCUIElement { app.staticTexts["Name"] } - var distance: XCUIElement { - return app.staticTexts["Distance"] - } - - var time: XCUIElement { - return app.staticTexts["Time"] - } - - var dogStory: XCUIElement { - return app.staticTexts["Dog Story"] - } - - var ownerPicture: XCUIElement { - return app.images["Owner Picture"] - } - - var ownerName: XCUIElement { - return app.staticTexts["Owner Name"] - } - var ownerBio: XCUIElement { - return app.staticTexts["Owner Bio"] - } - - var contactButton: XCUIElement { - return app.buttons["Contact Owner"] - } - - var adoptMeButton: XCUIElement { - return app.buttons["Adopt Me"] - } + // MARK: - State - var puppyName: XCUIElement { - return app.staticTexts["Parkinson"] + var cardDetails: Bool { + puppyName.exists && + dogPicture.exists && + gender.exists && + distance.exists && + time.exists && + ownerPicture.exists && + ownerName.exists && + ownerBio.exists && + contactButton.exists && + adoptMeButton.exists } - - func puppyNameExists() -> Bool { - return puppyName.exists - } - - func dogPictureExists() -> Bool { - return dogPicture.exists - } - - func genderExists() -> Bool { - return gender.exists - } - - func distanceExists() -> Bool { - return distance.exists - } - - func timeExists() -> Bool { - return time.exists - } - - func ownerPictureExists() -> Bool { - return ownerPicture.exists - } - - func ownerNameExists() -> Bool { - return ownerName.exists - } - - func ownerBioExists() -> Bool { - return ownerBio.exists - } - - func contactButtonExists() -> Bool { - return contactButton.exists - } - - func adoptMeButtonExists() -> Bool { - return adoptMeButton.exists - } + // MARK: - Actions - func tapFavorite() { favoriteButton.tap() } diff --git a/Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift b/Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift index 7e83ae4..7d6072a 100644 --- a/Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift +++ b/Wiggles-iOSUITests/PageObjects/PuppyListingPage.swift @@ -3,19 +3,31 @@ import XCTest class PuppyListingPage { let app: XCUIApplication + // MARK: - Init + init(app: XCUIApplication) { self.app = app } - var puppyCards: XCUIElementQuery { - return app.buttons.matching(identifier: "Dog Card") - } + // MARK: - UI Elements + + var userName: XCUIElement { app.staticTexts["User Name"] } + var puppyCards: XCUIElementQuery { app.buttons.matching(identifier: "Dog Card") } - func tapFirstPuppy() { - puppyCards.element(boundBy: 0).tap() + // MARK: - State + + var hasUserName: Bool { userName.exists } + var hasPuppyCards: Bool { + let firstCard = puppyCards.element(boundBy: 0) + return firstCard.waitForExistence(timeout: 5) } - func isLoaded() -> Bool { - return puppyCards.count > 0 + // MARK: - Actions + + func tapLastPuppy() { + let lastIndex = puppyCards.count - 1 + guard lastIndex >= 0 else { return } + + puppyCards.element(boundBy: lastIndex).tap() } } diff --git a/Wiggles-iOSUITests/WiggleUITests.swift b/Wiggles-iOSUITests/WiggleUITests.swift index 441294b..5eaebf4 100644 --- a/Wiggles-iOSUITests/WiggleUITests.swift +++ b/Wiggles-iOSUITests/WiggleUITests.swift @@ -12,21 +12,14 @@ class WigglesUITests: XCTestCase { func testNavigationToPDPAndBack() { let plp = PuppyListingPage(app: app) - XCTAssertTrue(plp.isLoaded()) - plp.tapFirstPuppy() let pdp = PuppyDetailsPage(app: app) - XCTAssertTrue(pdp.puppyNameExists()) - XCTAssertTrue(pdp.dogPictureExists()) - XCTAssertTrue(pdp.genderExists()) - XCTAssertTrue(pdp.distanceExists()) - XCTAssertTrue(pdp.timeExists()) - XCTAssertTrue(pdp.ownerPictureExists()) - XCTAssertTrue(pdp.ownerNameExists()) - XCTAssertTrue(pdp.ownerBioExists()) - XCTAssertTrue(pdp.contactButtonExists()) - XCTAssertTrue(pdp.adoptMeButtonExists()) + + XCTAssertTrue(plp.hasPuppyCards, "Expected at least one puppy card on listing page.") + plp.tapLastPuppy() + XCTAssertTrue(pdp.cardDetails, "Expected PDP to load successfully.") pdp.tapFavorite() pdp.goBack() - XCTAssertTrue(plp.isLoaded()) + XCTAssertTrue(plp.hasPuppyCards, "Expected to return to the listing page.") } } +