From 7e511ec3dc16a6a459543f27094f23f034c233d2 Mon Sep 17 00:00:00 2001 From: Tiago Marques Date: Mon, 28 Aug 2023 10:13:36 -0300 Subject: [PATCH 1/4] Add PHPicker Screen Object --- .../Screens/Media/PHPickerScreen.swift | 48 +++++++++++++++++++ WordPress/WordPress.xcodeproj/project.pbxproj | 4 ++ 2 files changed, 52 insertions(+) create mode 100644 WordPress/UITestsFoundation/Screens/Media/PHPickerScreen.swift diff --git a/WordPress/UITestsFoundation/Screens/Media/PHPickerScreen.swift b/WordPress/UITestsFoundation/Screens/Media/PHPickerScreen.swift new file mode 100644 index 000000000000..cb4a091ffa48 --- /dev/null +++ b/WordPress/UITestsFoundation/Screens/Media/PHPickerScreen.swift @@ -0,0 +1,48 @@ +import ScreenObject +import XCTest + +public class PHPickerScreen: ScreenObject { + + private let addButtonGetter: (XCUIApplication) -> XCUIElement = { + $0.buttons["Add"] + } + + private let photosNavigationBarGetter: (XCUIApplication) -> XCUIElement = { + $0.navigationBars["Photos"] + } + + private let photosScrollViewGetter: (XCUIApplication) -> XCUIElement = { + $0.otherElements["Photos"].scrollViews.firstMatch + } + + var addButton: XCUIElement { addButtonGetter(app) } + var photosNavigationBar: XCUIElement { photosNavigationBarGetter(app) } + var photosScrollView: XCUIElement { photosScrollViewGetter(app) } + + public init(app: XCUIApplication = XCUIApplication()) throws { + try super.init( + expectedElementGetter: photosNavigationBarGetter, + app: app + ) + } + + public func selectImage(atIndex index: Int) { + let selectedImage = photosScrollView.images.element(boundBy: index) + XCTAssertTrue(selectedImage.waitForExistence(timeout: 5), "Selected image did not load") + selectedImage.tap() + } + + public func selectMultipleImages(_ numberOfImages: Int) { + var index = 0 + while index < numberOfImages { + selectImage(atIndex: index) + index += 1 + } + + addButton.tap() + } + + public static func isLoaded(app: XCUIApplication = XCUIApplication()) -> Bool { + return (try? PHPickerScreen().isLoaded) ?? false + } +} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index fdf9fc0a096c..9cdc9cc6e350 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -3459,6 +3459,7 @@ EA85B7AF2A688AB00096E097 /* TestObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA85B7A92A6860370096E097 /* TestObserver.swift */; }; EA85B7B02A688B1C0096E097 /* TestObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA85B7A92A6860370096E097 /* TestObserver.swift */; }; EAB10E4027487F5D000DA4C1 /* ReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB10E3F27487F5D000DA4C1 /* ReaderTests.swift */; }; + EABE86612A995124004281A8 /* PHPickerScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABE86602A995124004281A8 /* PHPickerScreen.swift */; }; EAD08D0E29D45E23001A72F9 /* CommentsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD08D0D29D45E23001A72F9 /* CommentsScreen.swift */; }; EAD2BF4227594DAB00A847BB /* StatsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD2BF4127594DAB00A847BB /* StatsTests.swift */; }; EB6DF027AF96D801F280E805 /* Pods_WordPressStatsWidgets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D670B9448DF9991366CF42D /* Pods_WordPressStatsWidgets.framework */; }; @@ -8835,6 +8836,7 @@ EA78189327596B2F00554DFA /* ContactUsScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactUsScreen.swift; sourceTree = ""; }; EA85B7A92A6860370096E097 /* TestObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestObserver.swift; sourceTree = ""; }; EAB10E3F27487F5D000DA4C1 /* ReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderTests.swift; sourceTree = ""; }; + EABE86602A995124004281A8 /* PHPickerScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PHPickerScreen.swift; sourceTree = ""; }; EAD08D0D29D45E23001A72F9 /* CommentsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsScreen.swift; sourceTree = ""; }; EAD2BF4127594DAB00A847BB /* StatsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatsTests.swift; sourceTree = ""; }; EEF80689364FA9CAE10405E8 /* Pods-WordPressNotificationServiceExtension.release-alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WordPressNotificationServiceExtension.release-alpha.xcconfig"; path = "../Pods/Target Support Files/Pods-WordPressNotificationServiceExtension/Pods-WordPressNotificationServiceExtension.release-alpha.xcconfig"; sourceTree = ""; }; @@ -11216,6 +11218,7 @@ children = ( CC5218992279CF3B008998CE /* MediaPickerAlbumListScreen.swift */, CC52189B2279D295008998CE /* MediaPickerAlbumScreen.swift */, + EABE86602A995124004281A8 /* PHPickerScreen.swift */, ); path = Media; sourceTree = ""; @@ -22854,6 +22857,7 @@ 3FE39A3B26F837FF006E2B3A /* PostsScreen.swift in Sources */, 3F2F855C26FAF227000FCDA5 /* LinkOrPasswordScreen.swift in Sources */, 3F2F855226FAF227000FCDA5 /* SignupCheckMagicLinkScreen.swift in Sources */, + EABE86612A995124004281A8 /* PHPickerScreen.swift in Sources */, 3FE39A4026F8386A006E2B3A /* SiteSettingsScreen.swift in Sources */, D8E7529B2A29DC4C00E73B2D /* XCUIApplication+ScrollDownToElement.swift in Sources */, 3FE39A3526F83701006E2B3A /* LoginEpilogueScreen.swift in Sources */, From c2609d9582b4dde71c218f6900da0b5f8fbb31ba Mon Sep 17 00:00:00 2001 From: Tiago Marques Date: Mon, 28 Aug 2023 10:18:54 -0300 Subject: [PATCH 2/4] Update setFeatureImage() including chooseFromMediaButton --- .../Screens/Editor/EditorPostSettings.swift | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/WordPress/UITestsFoundation/Screens/Editor/EditorPostSettings.swift b/WordPress/UITestsFoundation/Screens/Editor/EditorPostSettings.swift index 16312b729c58..bececdaab531 100644 --- a/WordPress/UITestsFoundation/Screens/Editor/EditorPostSettings.swift +++ b/WordPress/UITestsFoundation/Screens/Editor/EditorPostSettings.swift @@ -11,6 +11,10 @@ public class EditorPostSettings: ScreenObject { $0.cells["Categories"] } + private let chooseFromMediaButtonGetter: (XCUIApplication) -> XCUIElement = { + $0.buttons["Choose from Media"] + } + private let tagsSectionGetter: (XCUIApplication) -> XCUIElement = { $0.cells["Tags"] } @@ -44,6 +48,7 @@ public class EditorPostSettings: ScreenObject { } var categoriesSection: XCUIElement { categoriesSectionGetter(app) } + var chooseFromMediaButton: XCUIElement { chooseFromMediaButtonGetter(app) } var currentFeaturedImage: XCUIElement { currentFeaturedImageGetter(app) } var dateSelector: XCUIElement { dateSelectorGetter(app) } var doneButton: XCUIElement { doneButtonGetter(app) } @@ -96,8 +101,8 @@ public class EditorPostSettings: ScreenObject { public func setFeaturedImage() throws -> EditorPostSettings { featuredImageButton.tap() - try MediaPickerAlbumListScreen() - .selectAlbum(atIndex: 0) // Select media library + chooseFromMediaButton.tap() + try MediaPickerAlbumScreen() .selectImage(atIndex: 0) // Select latest uploaded image return try EditorPostSettings() From e2ac8a4a83f95c20b1ab91692f91f22d56ce37cb Mon Sep 17 00:00:00 2001 From: Tiago Marques Date: Mon, 28 Aug 2023 10:21:38 -0300 Subject: [PATCH 3/4] Make chooseFromDevice() return PHPicker Screen Object --- .../Screens/Editor/BlockEditorScreen.swift | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift index de514f54ddb7..fcb9e81a44c7 100644 --- a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift +++ b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift @@ -392,14 +392,10 @@ public class BlockEditorScreen: ScreenObject { .selectMultipleImages(numberOfImages) } - private func chooseFromDevice() throws -> MediaPickerAlbumScreen { + private func chooseFromDevice() throws -> PHPickerScreen { chooseFromDeviceButton.tap() - // Allow access to device media - app.tap() // trigger the media permissions alert handler - - return try MediaPickerAlbumListScreen() - .selectAlbum(atIndex: 0) + return try PHPickerScreen() } private func confirmPost(button: XCUIElement) throws { From eeb86931216fba696c59b509a782758ced689d13 Mon Sep 17 00:00:00 2001 From: Tiago Marques Date: Mon, 28 Aug 2023 10:30:00 -0300 Subject: [PATCH 4/4] Re-enable media picker tests --- WordPress/UITests/JetpackUITests.xctestplan | 4 ---- 1 file changed, 4 deletions(-) diff --git a/WordPress/UITests/JetpackUITests.xctestplan b/WordPress/UITests/JetpackUITests.xctestplan index f8cd1f2f468e..320a39381980 100644 --- a/WordPress/UITests/JetpackUITests.xctestplan +++ b/WordPress/UITests/JetpackUITests.xctestplan @@ -23,10 +23,6 @@ "parallelizable" : true, "skippedTests" : [ "EditorAztecTests", - "EditorGutenbergTests\/testAddGalleryBlock()", - "EditorGutenbergTests\/testAddMediaBlocks()", - "EditorGutenbergTests\/testAddRemoveFeaturedImage()", - "EditorGutenbergTests\/testBasicPostPublishWithCategoryAndTag()", "LoginTests\/testEmailMagicLinkLogin()", "SignupTests", "SignupTests\/testEmailSignup()",