From a3b300b7f4152c79b4699443c1e87a248f05bf89 Mon Sep 17 00:00:00 2001 From: David Calhoun Date: Tue, 26 Sep 2023 19:53:25 -0400 Subject: [PATCH 1/4] test: Paste media URL to avoid dropped characters during typing The rapid typing within XCTest occasionally results in dropped characters in the "Insert from URL" text field. This means a valid URL of `https://wordpress.org/video.mp4` ends up captured as `h://wordpress.org/video.mp4`. Addressing the underlying performance issue might be ideal, but pasting the entire URL instead of typing is a reasonable workaround for now. --- .../UITestsFoundation/Screens/Editor/BlockEditorScreen.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift index 0d0907b7b576..5c7b46d49096 100644 --- a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift +++ b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift @@ -186,7 +186,7 @@ public class BlockEditorScreen: ScreenObject { private func addMediaBlockFromUrl(blockType: String, UrlPath: String) { addBlock(blockType) insertFromUrlButton.tap() - app.textFields.element.typeText(UrlPath) + type(text: UrlPath, in: app.textFields.element) // to dismiss media block URL prompt tapTopOfScreen() } From aece7ee7b229c994d69835fb686ea268fa227d09 Mon Sep 17 00:00:00 2001 From: David Calhoun Date: Tue, 26 Sep 2023 19:56:31 -0400 Subject: [PATCH 2/4] test: Increase media block predicate specificity The previous predicates passed after merely adding a block, as it asserted aspects that do not verify the act of attaching media. The new predicates are only present if attaching media to the blocks succeeds. This increases the coverage for the tests. --- .../Screens/Editor/BlockEditorScreen.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift index 5c7b46d49096..ff81920f2c3b 100644 --- a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift +++ b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift @@ -202,9 +202,9 @@ public class BlockEditorScreen: ScreenObject { @discardableResult public func verifyMediaBlocksDisplayed() -> Self { - let imagePredicate = NSPredicate(format: "label == 'Image Block. Row 1'") - let videoPredicate = NSPredicate(format: "label == 'Video Block. Row 2'") - let audioPredicate = NSPredicate(format: "label == 'Audio Block. Row 3'") + let imagePredicate = NSPredicate(format: "label == 'Image caption. Empty'") + let videoPredicate = NSPredicate(format: "label == 'Video caption. Empty'") + let audioPredicate = NSPredicate(format: "label == 'Audio Player'") XCTAssertTrue(app.buttons.containing(imagePredicate).firstMatch.exists) XCTAssertTrue(app.buttons.containing(videoPredicate).firstMatch.exists) From aa80b66735f8a1552c4d5eb134dd38717b3ba5b9 Mon Sep 17 00:00:00 2001 From: David Calhoun Date: Tue, 26 Sep 2023 19:58:25 -0400 Subject: [PATCH 3/4] test: Re-enable media block test for iPhone devices The other changes in this branch appear to resolve the issues causing iPhone failures. --- WordPress/UITests/Tests/EditorGutenbergTests.swift | 5 ----- .../Screens/Editor/BlockEditorScreen.swift | 9 --------- 2 files changed, 14 deletions(-) diff --git a/WordPress/UITests/Tests/EditorGutenbergTests.swift b/WordPress/UITests/Tests/EditorGutenbergTests.swift index d2260291658e..75b4acbe378f 100644 --- a/WordPress/UITests/Tests/EditorGutenbergTests.swift +++ b/WordPress/UITests/Tests/EditorGutenbergTests.swift @@ -102,11 +102,6 @@ class EditorGutenbergTests: XCTestCase { func testAddMediaBlocks() throws { try BlockEditorScreen() .addImage() - .verifyImageBlockDisplayed() - - try XCTSkipIf(!XCUIDevice.isPad, "Test currently fails on iPhone in CI for add video and audio from URL - Tapping on the coordinate location results in a blank screen. Skipping rest of test on iPhone while investigation is in progress") - - try BlockEditorScreen() .addVideoFromUrl(urlPath: videoUrlPath) .addAudioFromUrl(urlPath: audioUrlPath) .verifyMediaBlocksDisplayed() diff --git a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift index ff81920f2c3b..bb9bb4c95ba2 100644 --- a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift +++ b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift @@ -191,15 +191,6 @@ public class BlockEditorScreen: ScreenObject { tapTopOfScreen() } - // Can be removed once `testAddMediaBlocks()` test is fixed on iPhone - @discardableResult - public func verifyImageBlockDisplayed() -> Self { - let imagePredicate = NSPredicate(format: "label == 'Image Block. Row 1'") - XCTAssertTrue(app.buttons.containing(imagePredicate).firstMatch.waitForExistence(timeout: 5)) - - return self - } - @discardableResult public func verifyMediaBlocksDisplayed() -> Self { let imagePredicate = NSPredicate(format: "label == 'Image caption. Empty'") From d0a0f2ab026134e46995de9b38cbc7d6a1c6c735 Mon Sep 17 00:00:00 2001 From: David Calhoun Date: Thu, 28 Sep 2023 08:52:22 -0400 Subject: [PATCH 4/4] test: Assert media block position and attachments Asserting the block position in addition to the media attachment increases the robustness of the test. --- .../Screens/Editor/BlockEditorScreen.swift | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift index bb9bb4c95ba2..eff490ef0e8e 100644 --- a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift +++ b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift @@ -193,13 +193,19 @@ public class BlockEditorScreen: ScreenObject { @discardableResult public func verifyMediaBlocksDisplayed() -> Self { - let imagePredicate = NSPredicate(format: "label == 'Image caption. Empty'") - let videoPredicate = NSPredicate(format: "label == 'Video caption. Empty'") - let audioPredicate = NSPredicate(format: "label == 'Audio Player'") - - XCTAssertTrue(app.buttons.containing(imagePredicate).firstMatch.exists) - XCTAssertTrue(app.buttons.containing(videoPredicate).firstMatch.exists) - XCTAssertTrue(app.buttons.containing(audioPredicate).firstMatch.exists) + let imageBlock = NSPredicate(format: "label == 'Image Block. Row 1'") + let imageCaption = NSPredicate(format: "label == 'Image caption. Empty'") + let videoBlock = NSPredicate(format: "label == 'Video Block. Row 2'") + let videoCaption = NSPredicate(format: "label == 'Video caption. Empty'") + let audioBlock = NSPredicate(format: "label == 'Audio Block. Row 3'") + let audioPlayer = NSPredicate(format: "label == 'Audio Player'") + + XCTAssertTrue(app.buttons.containing(imageBlock).firstMatch.exists) + XCTAssertTrue(app.buttons.containing(imageCaption).firstMatch.exists) + XCTAssertTrue(app.buttons.containing(videoBlock).firstMatch.exists) + XCTAssertTrue(app.buttons.containing(audioBlock).firstMatch.exists) + XCTAssertTrue(app.buttons.containing(videoCaption).firstMatch.exists) + XCTAssertTrue(app.buttons.containing(audioPlayer).firstMatch.exists) return self }