From b69cbface430b0f0c1fbeb56f4da0081b3fa60c0 Mon Sep 17 00:00:00 2001 From: Vitalii Perov Date: Wed, 12 Jun 2024 13:18:40 +0300 Subject: [PATCH 1/9] Add tests for canvas --- VoiceOver Designer.xcodeproj/project.pbxproj | 16 +- .../xcschemes/DesignerUITests.xcscheme | 3 +- .../Tests/SettingsTestsAuto.swift | 200 ++++++++++++++++++ 3 files changed, 212 insertions(+), 7 deletions(-) create mode 100644 VoiceOverDesignerUITests/Tests/SettingsTestsAuto.swift diff --git a/VoiceOver Designer.xcodeproj/project.pbxproj b/VoiceOver Designer.xcodeproj/project.pbxproj index fabf10d2..6837b7b3 100644 --- a/VoiceOver Designer.xcodeproj/project.pbxproj +++ b/VoiceOver Designer.xcodeproj/project.pbxproj @@ -41,6 +41,7 @@ 1ECE12DF2969B91700A3E917 /* WindowRestorationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ECE12DE2969B91700A3E917 /* WindowRestorationTests.swift */; }; 1EEE25C32944ADC900B84F01 /* Navigator in Frameworks */ = {isa = PBXBuildFile; productRef = 1EEE25C22944ADC900B84F01 /* Navigator */; }; 236A3C182AC756B200156F00 /* Presentation in Frameworks */ = {isa = PBXBuildFile; productRef = 236A3C172AC756B200156F00 /* Presentation */; }; + 589562AC2C19AA770086BC3F /* SettingsTestsAuto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 589562AB2C19AA770086BC3F /* SettingsTestsAuto.swift */; }; 742D242A2ADD939200EC224A /* RecentWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 742D24292ADD939200EC224A /* RecentWindowController.swift */; }; 742D242C2AE0BF9800EC224A /* ProjectStateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 742D242B2AE0BF9800EC224A /* ProjectStateController.swift */; }; 7439CD4429C664A800A557FC /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7439CD4329C664A800A557FC /* StoreKit.framework */; }; @@ -116,6 +117,7 @@ 1EC992DA28B119730020041B /* ProjectStateController+Toolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProjectStateController+Toolbar.swift"; sourceTree = ""; }; 1ECE12DE2969B91700A3E917 /* WindowRestorationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowRestorationTests.swift; sourceTree = ""; }; 1EF217D4281EBBE00036B09B /* VoiceOver-Designer-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "VoiceOver-Designer-Info.plist"; sourceTree = SOURCE_ROOT; }; + 589562AB2C19AA770086BC3F /* SettingsTestsAuto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestsAuto.swift; sourceTree = ""; }; 6B4705F729048D9800AC4C23 /* VoiceOver DesignerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "VoiceOver DesignerRelease.entitlements"; sourceTree = ""; }; 6B628795288D3A8D006F622A /* Features */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Features; path = "VoiceOver Designer/Features"; sourceTree = ""; }; 742D24292ADD939200EC224A /* RecentWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentWindowController.swift; sourceTree = ""; }; @@ -301,6 +303,7 @@ 1ECE12DE2969B91700A3E917 /* WindowRestorationTests.swift */, 1E183AE528B50600008B0F07 /* DocumentFromFileTests.swift */, 1E7B56AE28B38F5D008D1871 /* AdjustableTest.swift */, + 589562AB2C19AA770086BC3F /* SettingsTestsAuto.swift */, ); path = Tests; sourceTree = ""; @@ -485,6 +488,7 @@ 1E7B56AA28B38042008D1871 /* Canvas.swift in Sources */, 1E7B56A128B37BEF008D1871 /* TextSummary.swift in Sources */, 1E7B56A328B37C07008D1871 /* ProjectPanel.swift in Sources */, + 589562AC2C19AA770086BC3F /* SettingsTestsAuto.swift in Sources */, 1EA7411928B2683000D6CAA4 /* SettingsTests.swift in Sources */, 1E80528728B4DF6300743023 /* WindowTests.swift in Sources */, ); @@ -630,7 +634,7 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 28; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = P67Q4Q7HA9; + DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "VoiceOver-Designer-Info.plist"; @@ -661,7 +665,7 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 28; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = P67Q4Q7HA9; + DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "VoiceOver-Designer-Info.plist"; @@ -687,7 +691,7 @@ CODE_SIGN_ENTITLEMENTS = MacOSPreview/MacOSPreview.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 3; - DEVELOPMENT_TEAM = P67Q4Q7HA9; + DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MacOSPreview/Info.plist; @@ -714,7 +718,7 @@ CODE_SIGN_ENTITLEMENTS = MacOSPreview/MacOSPreview.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 3; - DEVELOPMENT_TEAM = P67Q4Q7HA9; + DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MacOSPreview/Info.plist; @@ -804,7 +808,7 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 28; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = P67Q4Q7HA9; + DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "VoiceOver-Designer-Info.plist"; @@ -830,7 +834,7 @@ CODE_SIGN_ENTITLEMENTS = MacOSPreview/MacOSPreview.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 3; - DEVELOPMENT_TEAM = P67Q4Q7HA9; + DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MacOSPreview/Info.plist; diff --git a/VoiceOver Preview/VoiceOver Preview.xcodeproj/xcshareddata/xcschemes/DesignerUITests.xcscheme b/VoiceOver Preview/VoiceOver Preview.xcodeproj/xcshareddata/xcschemes/DesignerUITests.xcscheme index 4bf8ca48..c8c7d7c4 100644 --- a/VoiceOver Preview/VoiceOver Preview.xcodeproj/xcshareddata/xcschemes/DesignerUITests.xcscheme +++ b/VoiceOver Preview/VoiceOver Preview.xcodeproj/xcshareddata/xcschemes/DesignerUITests.xcscheme @@ -26,7 +26,8 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES" + language = "en"> diff --git a/VoiceOverDesignerUITests/Tests/SettingsTestsAuto.swift b/VoiceOverDesignerUITests/Tests/SettingsTestsAuto.swift new file mode 100644 index 00000000..c1597146 --- /dev/null +++ b/VoiceOverDesignerUITests/Tests/SettingsTestsAuto.swift @@ -0,0 +1,200 @@ +// +// SettingsTestsAuto.swift +// VoiceOverDesignerUITests +// +// Created by Mikhail Rubanov on 11.04.2024. +// + +import XCTest + +final class DrawnElementTests: XCTestCase { + + var app: XCUIApplication! + + override func setUp() { + super.setUp() + app = XCUIApplication() + app.launch() + + createNewFile() + drawRectangle() + } + + func testExample() { + input(text: "City") + clickButtonTrait() + + assertNavigatorFirstCell(text: "City. Button.") + } + + func testExample2() { + input(text: "Country") + clickButtonTrait() + + assertNavigatorFirstCell(text: "Country. Button.") + } + + func testDeleteUndoRedo() { + XCUIApplication().typeKey(XCUIKeyboardKey.delete, modifierFlags: []) + XCTAssertTrue(app.staticTexts["Add your screenshot"].exists) + assertNavigatorElements(count: 0) + + let menuBarsQuery = app.menuBars + let editMenuBarItem = menuBarsQuery.menuBarItems["Edit"] + editMenuBarItem.click() + menuBarsQuery.menuItems["Undo"].click() + XCTAssertFalse(app.staticTexts["Add your screenshot"].exists) + assertNavigatorElements(count: 1) + //editMenuBarItem.click() + //menuBarsQuery.menuItems["Redo"].click() + //XCTAssertTrue(app.staticTexts["Add your screenshot"].exists) + + } + + func testDragUndoRedo() { + let from = CGVector(dx: 0.45, dy: 0.45) + let to = CGVector(dx: 0.5, dy: 0.5) + + let window = app.windows.firstMatch + let start = window.coordinate(withNormalizedOffset: from) + let finish = window.coordinate(withNormalizedOffset: to) + + start.press(forDuration: 0.01, thenDragTo: finish) + + let menuBarsQuery = app.menuBars + let editMenuBarItem = menuBarsQuery.menuBarItems["Edit"] + editMenuBarItem.click() + menuBarsQuery.menuItems["Undo"].click() + editMenuBarItem.click() + menuBarsQuery.menuItems["Redo"].click() + + } + + func testCreateOneElementContainer() { + //Разворачиваем приложение на весь экран + XCUIApplication().buttons[XCUIIdentifierFullScreenWindow].click() + XCUIApplication().buttons["Group in Container"].click() + + //assertLabel(text: "Container") + } + + func testCreateTwoElementContainer() { + + let from = CGVector(dx: 0.4, dy: 0.6) + let to = CGVector(dx: 0.5, dy: 0.7) + + let window = app.windows.firstMatch + let start = window.coordinate(withNormalizedOffset: from) + let finish = window.coordinate(withNormalizedOffset: to) + + start.press(forDuration: 0.01, thenDragTo: finish) + + let menuBarsQuery = app.menuBars + let editMenuBarItem = menuBarsQuery.menuBarItems["Edit"] + editMenuBarItem.click() + menuBarsQuery.menuItems["Select All"].click() + //Разворачиваем приложение на весь экран + XCUIApplication().buttons[XCUIIdentifierFullScreenWindow].click() + XCUIApplication().buttons["Group in Container"].click() + + //assertLabel(text: "Container") + } + + func testChangeSize() { + deselect(dx: 0.55, dy: 0.55) // same as assert + + select(dx: 0.45, dy: 0.45) + drag(from: 0.5, to: 0.6) + deselect(dx: 0.61, dy: 0.61) + + select(dx: 0.55, dy: 0.55) // same as range + } + + override func tearDown() { + closeWindowAndDelete() + + super.tearDown() + } + + private func createNewFile() { + // Создаем новый документ + let menuBarsQuery = app.menuBars + + let fileMenu = menuBarsQuery.menuBarItems["File"] + fileMenu.click() + + let fileNewMenu = menuBarsQuery.menuItems["New"] + fileNewMenu.click() + } + + func drawRectangle() { + drag(from: 0.4, to: 0.5) + } + + func input(text: String) { + let window = XCUIApplication().windows.firstMatch + + let labelComboBox = window.comboBoxes["LabelTextField"] + labelComboBox.click() + labelComboBox.typeText(text) + labelComboBox.typeKey(XCUIKeyboardKey.enter, modifierFlags: []) + } + + func clickButtonTrait() { + let window = XCUIApplication().windows.firstMatch + window.checkBoxes["Button"].click() + } + + func assertNavigatorFirstCell(text: String, file: StaticString = #file, line: UInt = #line) { + let window = XCUIApplication().windows.firstMatch + + let navigator = window.outlines.firstMatch + let actualText = navigator.cells.staticTexts.firstMatch.value as? String + + XCTAssertEqual(actualText, text, file: file, line: line) + } + + func assertNavigatorElements(count: Int, file: StaticString = #file, line: UInt = #line) { + let window = XCUIApplication().windows.firstMatch + + let navigator = window.outlines.firstMatch + let cellsCount = navigator.cells.count + + XCTAssertEqual(cellsCount, count, file: file, line: line) + } + + func closeWindowAndDelete() { + let window = XCUIApplication().windows.firstMatch + + window.buttons[XCUIIdentifierCloseWindow].click() + window.sheets.buttons["Delete"].click() + } + + func click(dx: Double, dy: Double) { + let window = app.windows.firstMatch + let assertClick = CGVector(dx: dx, dy: dy) + let tapTest = window.coordinate(withNormalizedOffset: assertClick) + tapTest.press(forDuration: 0.01) + } + + func deselect (dx: Double, dy: Double) { + click(dx: dx, dy: dy) + XCTAssertTrue(app.staticTexts["Select or draw a control\nto adjust settings"].exists) + } + + func select (dx: Double, dy: Double) { + click(dx: dx, dy: dy) + XCTAssertFalse(app.staticTexts["Select or draw a control\nto adjust settings"].exists) + } + + func drag(from: Double, to: Double) { + let from = CGVector(dx: from, dy: from) + let to = CGVector(dx: to, dy: to) + + let window = app.windows.firstMatch + let start = window.coordinate(withNormalizedOffset: from) + let finish = window.coordinate(withNormalizedOffset: to) + + start.press(forDuration: 0.01, thenDragTo: finish) + } +} From 1fedf97933e93b173257b3f7d5c7e2eec502a1fa Mon Sep 17 00:00:00 2001 From: Mikhail Rubanov Date: Wed, 12 Jun 2024 08:25:30 -0300 Subject: [PATCH 2/9] Rename to CanvasTests --- VoiceOver Designer.xcodeproj/project.pbxproj | 8 +-- .../Base/DesignerTests.swift | 1 + .../PageObjects/Panels/Canvas.swift | 40 +++++++++++ ...tingsTestsAuto.swift => CanvasTests.swift} | 68 ++++++------------- 4 files changed, 66 insertions(+), 51 deletions(-) rename VoiceOverDesignerUITests/Tests/{SettingsTestsAuto.swift => CanvasTests.swift} (74%) diff --git a/VoiceOver Designer.xcodeproj/project.pbxproj b/VoiceOver Designer.xcodeproj/project.pbxproj index 6837b7b3..53e7235c 100644 --- a/VoiceOver Designer.xcodeproj/project.pbxproj +++ b/VoiceOver Designer.xcodeproj/project.pbxproj @@ -41,7 +41,7 @@ 1ECE12DF2969B91700A3E917 /* WindowRestorationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ECE12DE2969B91700A3E917 /* WindowRestorationTests.swift */; }; 1EEE25C32944ADC900B84F01 /* Navigator in Frameworks */ = {isa = PBXBuildFile; productRef = 1EEE25C22944ADC900B84F01 /* Navigator */; }; 236A3C182AC756B200156F00 /* Presentation in Frameworks */ = {isa = PBXBuildFile; productRef = 236A3C172AC756B200156F00 /* Presentation */; }; - 589562AC2C19AA770086BC3F /* SettingsTestsAuto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 589562AB2C19AA770086BC3F /* SettingsTestsAuto.swift */; }; + 589562AC2C19AA770086BC3F /* CanvasTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 589562AB2C19AA770086BC3F /* CanvasTests.swift */; }; 742D242A2ADD939200EC224A /* RecentWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 742D24292ADD939200EC224A /* RecentWindowController.swift */; }; 742D242C2AE0BF9800EC224A /* ProjectStateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 742D242B2AE0BF9800EC224A /* ProjectStateController.swift */; }; 7439CD4429C664A800A557FC /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7439CD4329C664A800A557FC /* StoreKit.framework */; }; @@ -117,7 +117,7 @@ 1EC992DA28B119730020041B /* ProjectStateController+Toolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProjectStateController+Toolbar.swift"; sourceTree = ""; }; 1ECE12DE2969B91700A3E917 /* WindowRestorationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowRestorationTests.swift; sourceTree = ""; }; 1EF217D4281EBBE00036B09B /* VoiceOver-Designer-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "VoiceOver-Designer-Info.plist"; sourceTree = SOURCE_ROOT; }; - 589562AB2C19AA770086BC3F /* SettingsTestsAuto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestsAuto.swift; sourceTree = ""; }; + 589562AB2C19AA770086BC3F /* CanvasTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CanvasTests.swift; sourceTree = ""; }; 6B4705F729048D9800AC4C23 /* VoiceOver DesignerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "VoiceOver DesignerRelease.entitlements"; sourceTree = ""; }; 6B628795288D3A8D006F622A /* Features */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Features; path = "VoiceOver Designer/Features"; sourceTree = ""; }; 742D24292ADD939200EC224A /* RecentWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentWindowController.swift; sourceTree = ""; }; @@ -303,7 +303,7 @@ 1ECE12DE2969B91700A3E917 /* WindowRestorationTests.swift */, 1E183AE528B50600008B0F07 /* DocumentFromFileTests.swift */, 1E7B56AE28B38F5D008D1871 /* AdjustableTest.swift */, - 589562AB2C19AA770086BC3F /* SettingsTestsAuto.swift */, + 589562AB2C19AA770086BC3F /* CanvasTests.swift */, ); path = Tests; sourceTree = ""; @@ -488,7 +488,7 @@ 1E7B56AA28B38042008D1871 /* Canvas.swift in Sources */, 1E7B56A128B37BEF008D1871 /* TextSummary.swift in Sources */, 1E7B56A328B37C07008D1871 /* ProjectPanel.swift in Sources */, - 589562AC2C19AA770086BC3F /* SettingsTestsAuto.swift in Sources */, + 589562AC2C19AA770086BC3F /* CanvasTests.swift in Sources */, 1EA7411928B2683000D6CAA4 /* SettingsTests.swift in Sources */, 1E80528728B4DF6300743023 /* WindowTests.swift in Sources */, ); diff --git a/VoiceOverDesignerUITests/Base/DesignerTests.swift b/VoiceOverDesignerUITests/Base/DesignerTests.swift index c6302289..d5692292 100644 --- a/VoiceOverDesignerUITests/Base/DesignerTests.swift +++ b/VoiceOverDesignerUITests/Base/DesignerTests.swift @@ -4,6 +4,7 @@ class DesignerTests: XCTestCase { var app: XCUIApplication! override func setUpWithError() throws { + try super.setUpWithError() continueAfterFailure = false app = XCUIApplication() diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift index ebeabec2..da1abf3e 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift @@ -38,4 +38,44 @@ class Canvas: ProjectPanel { tap(location) return self } + + @discardableResult + func click(dx: Double, dy: Double) -> Self { + let window = app.windows.firstMatch + let assertClick = CGVector(dx: dx, dy: dy) + let tapTest = window.coordinate(withNormalizedOffset: assertClick) + tapTest.press(forDuration: 0.01) + + return self + } + + @discardableResult + func deselect(dx: Double, dy: Double) -> Self { + click(dx: dx, dy: dy) + XCTAssertTrue(app.staticTexts["Select or draw a control\nto adjust settings"].exists) + + return self + } + + @discardableResult + func select(dx: Double, dy: Double) -> Self { + click(dx: dx, dy: dy) + XCTAssertFalse(app.staticTexts["Select or draw a control\nto adjust settings"].exists) + + return self + } + + @discardableResult + func drag(from: Double, to: Double) -> Self { + let from = CGVector(dx: from, dy: from) + let to = CGVector(dx: to, dy: to) + + let window = app.windows.firstMatch + let start = window.coordinate(withNormalizedOffset: from) + let finish = window.coordinate(withNormalizedOffset: to) + + start.press(forDuration: 0.01, thenDragTo: finish) + + return self + } } diff --git a/VoiceOverDesignerUITests/Tests/SettingsTestsAuto.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift similarity index 74% rename from VoiceOverDesignerUITests/Tests/SettingsTestsAuto.swift rename to VoiceOverDesignerUITests/Tests/CanvasTests.swift index c1597146..299ad392 100644 --- a/VoiceOverDesignerUITests/Tests/SettingsTestsAuto.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -7,13 +7,11 @@ import XCTest -final class DrawnElementTests: XCTestCase { +final class CanvasTests: DesignerTests { - var app: XCUIApplication! - - override func setUp() { - super.setUp() - app = XCUIApplication() + override func setUpWithError() throws { + try super.setUpWithError() + app.launch() createNewFile() @@ -101,13 +99,16 @@ final class DrawnElementTests: XCTestCase { } func testChangeSize() { - deselect(dx: 0.55, dy: 0.55) // same as assert + canvas + .deselect(dx: 0.55, dy: 0.55) // same as assert - select(dx: 0.45, dy: 0.45) - drag(from: 0.5, to: 0.6) - deselect(dx: 0.61, dy: 0.61) + canvas + .select(dx: 0.45, dy: 0.45) + .drag(from: 0.5, to: 0.6) + .deselect(dx: 0.61, dy: 0.61) - select(dx: 0.55, dy: 0.55) // same as range + canvas + .select(dx: 0.55, dy: 0.55) // same as range } override func tearDown() { @@ -128,7 +129,7 @@ final class DrawnElementTests: XCTestCase { } func drawRectangle() { - drag(from: 0.4, to: 0.5) + canvas.drag(from: 0.4, to: 0.5) } func input(text: String) { @@ -155,13 +156,13 @@ final class DrawnElementTests: XCTestCase { } func assertNavigatorElements(count: Int, file: StaticString = #file, line: UInt = #line) { - let window = XCUIApplication().windows.firstMatch - - let navigator = window.outlines.firstMatch - let cellsCount = navigator.cells.count - - XCTAssertEqual(cellsCount, count, file: file, line: line) - } + let window = XCUIApplication().windows.firstMatch + + let navigator = window.outlines.firstMatch + let cellsCount = navigator.cells.count + + XCTAssertEqual(cellsCount, count, file: file, line: line) + } func closeWindowAndDelete() { let window = XCUIApplication().windows.firstMatch @@ -169,32 +170,5 @@ final class DrawnElementTests: XCTestCase { window.buttons[XCUIIdentifierCloseWindow].click() window.sheets.buttons["Delete"].click() } - - func click(dx: Double, dy: Double) { - let window = app.windows.firstMatch - let assertClick = CGVector(dx: dx, dy: dy) - let tapTest = window.coordinate(withNormalizedOffset: assertClick) - tapTest.press(forDuration: 0.01) - } - - func deselect (dx: Double, dy: Double) { - click(dx: dx, dy: dy) - XCTAssertTrue(app.staticTexts["Select or draw a control\nto adjust settings"].exists) - } - - func select (dx: Double, dy: Double) { - click(dx: dx, dy: dy) - XCTAssertFalse(app.staticTexts["Select or draw a control\nto adjust settings"].exists) - } - - func drag(from: Double, to: Double) { - let from = CGVector(dx: from, dy: from) - let to = CGVector(dx: to, dy: to) - - let window = app.windows.firstMatch - let start = window.coordinate(withNormalizedOffset: from) - let finish = window.coordinate(withNormalizedOffset: to) - - start.press(forDuration: 0.01, thenDragTo: finish) - } + } From ab109192ff43598d91795b2e07c6885a8a9297ad Mon Sep 17 00:00:00 2001 From: Mikhail Rubanov Date: Wed, 12 Jun 2024 08:55:35 -0300 Subject: [PATCH 3/9] Rewrite testCreateTwoElementContainer() --- VoiceOver Designer.xcodeproj/project.pbxproj | 8 ++++ .../Base/DesignerTests.swift | 10 +++++ .../PageObjects/Panels/Navigator.swift | 25 +++++++++++++ .../PageObjects/Panels/StatusBar.swift | 37 +++++++++++++++++++ .../Tests/CanvasTests.swift | 28 ++++++-------- 5 files changed, 91 insertions(+), 17 deletions(-) create mode 100644 VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift create mode 100644 VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift diff --git a/VoiceOver Designer.xcodeproj/project.pbxproj b/VoiceOver Designer.xcodeproj/project.pbxproj index 53e7235c..caf3c6da 100644 --- a/VoiceOver Designer.xcodeproj/project.pbxproj +++ b/VoiceOver Designer.xcodeproj/project.pbxproj @@ -47,6 +47,8 @@ 7439CD4429C664A800A557FC /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7439CD4329C664A800A557FC /* StoreKit.framework */; }; 74866ADE2AE6DFBA00D42AFA /* PresentationToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74866ADD2AE6DFBA00D42AFA /* PresentationToolbar.swift */; }; 74866AE12AE6E1CF00D42AFA /* ToolbarItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74866AE02AE6E1CF00D42AFA /* ToolbarItems.swift */; }; + 74E0D62F2C19BD9A008E1E77 /* StatusBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74E0D62E2C19BD9A008E1E77 /* StatusBar.swift */; }; + 74E0D6312C19C32A008E1E77 /* Navigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74E0D6302C19C32A008E1E77 /* Navigator.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -125,6 +127,8 @@ 7439CD4329C664A800A557FC /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; 74866ADD2AE6DFBA00D42AFA /* PresentationToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationToolbar.swift; sourceTree = ""; }; 74866AE02AE6E1CF00D42AFA /* ToolbarItems.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarItems.swift; sourceTree = ""; }; + 74E0D62E2C19BD9A008E1E77 /* StatusBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusBar.swift; sourceTree = ""; }; + 74E0D6302C19C32A008E1E77 /* Navigator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Navigator.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -228,7 +232,9 @@ isa = PBXGroup; children = ( 1E7B569E28B37BE0008D1871 /* Settings.swift */, + 74E0D62E2C19BD9A008E1E77 /* StatusBar.swift */, 1E7B56A928B38042008D1871 /* Canvas.swift */, + 74E0D6302C19C32A008E1E77 /* Navigator.swift */, 1E7B56A028B37BEF008D1871 /* TextSummary.swift */, ); path = Panels; @@ -477,8 +483,10 @@ buildActionMask = 2147483647; files = ( 1EB554B228B274B6000DC4FB /* Robot.swift in Sources */, + 74E0D6312C19C32A008E1E77 /* Navigator.swift in Sources */, 1E7B56A728B37C51008D1871 /* RecentWindow.swift in Sources */, 1E183AE628B50600008B0F07 /* DocumentFromFileTests.swift in Sources */, + 74E0D62F2C19BD9A008E1E77 /* StatusBar.swift in Sources */, 1E7B569C28B37B7C008D1871 /* DesignerTests.swift in Sources */, 1ECE12DF2969B91700A3E917 /* WindowRestorationTests.swift in Sources */, 1E7B569F28B37BE0008D1871 /* Settings.swift in Sources */, diff --git a/VoiceOverDesignerUITests/Base/DesignerTests.swift b/VoiceOverDesignerUITests/Base/DesignerTests.swift index d5692292..7f06fc06 100644 --- a/VoiceOverDesignerUITests/Base/DesignerTests.swift +++ b/VoiceOverDesignerUITests/Base/DesignerTests.swift @@ -61,6 +61,16 @@ class DesignerTests: XCTestCase { project.settingsPanel } + var statusBar: StatusBar { + StatusBar(window: project.projectWindow, + app: app) + } + + var navigator: Navigator { + Navigator(window: project.projectWindow, + app: app) + } + func closeWindow() { app.windows.firstMatch.buttons[XCUIIdentifierCloseWindow].click() } diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift new file mode 100644 index 00000000..60310341 --- /dev/null +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift @@ -0,0 +1,25 @@ +import XCTest + +class Navigator: ProjectPanel { + + var navigator: XCUIElement { window.outlines.firstMatch } + + @discardableResult + func groupInContainer() -> Self { + app.buttons["Group in Container"].click() + + return self + } + + @discardableResult + func assertFirstCell( + text: String, + file: StaticString = #file, + line: UInt = #line + ) -> Self { + let actualText = navigator.cells.staticTexts.firstMatch.value as? String + + XCTAssertEqual(actualText, text, file: file, line: line) + return self + } +} diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift b/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift new file mode 100644 index 00000000..14dbb321 --- /dev/null +++ b/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift @@ -0,0 +1,37 @@ +// +// StatusBar.swift +// VoiceOverDesignerUITests +// +// Created by Mikhail Rubanov on 12.06.2024. +// + +import XCTest + +class StatusBar: ProjectPanel { + var statusBar: XCUIElement { app.menuBars.firstMatch } + + var editMenu: XCUIElement { statusBar.menuBarItems["Edit"].firstMatch } + + var selectAllMenu: XCUIElement { statusBar.menuItems["Select All"].firstMatch } + + @discardableResult + func clickEdit() -> Self { + editMenu.click() + + return self + } + + @discardableResult + func clickSelectAll() -> Self { + selectAllMenu.click() + + return self + } + + @discardableResult + func openInFullScreen() -> Self { + app.buttons[XCUIIdentifierFullScreenWindow].click() + + return self + } +} diff --git a/VoiceOverDesignerUITests/Tests/CanvasTests.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift index 299ad392..620c3e09 100644 --- a/VoiceOverDesignerUITests/Tests/CanvasTests.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -77,25 +77,19 @@ final class CanvasTests: DesignerTests { } func testCreateTwoElementContainer() { + canvas + .draw(from: CGVector(dx: 0.4, dy: 0.6), + to: CGVector(dx: 0.5, dy: 0.7)) - let from = CGVector(dx: 0.4, dy: 0.6) - let to = CGVector(dx: 0.5, dy: 0.7) - - let window = app.windows.firstMatch - let start = window.coordinate(withNormalizedOffset: from) - let finish = window.coordinate(withNormalizedOffset: to) - - start.press(forDuration: 0.01, thenDragTo: finish) + statusBar + .clickEdit() + .clickSelectAll() - let menuBarsQuery = app.menuBars - let editMenuBarItem = menuBarsQuery.menuBarItems["Edit"] - editMenuBarItem.click() - menuBarsQuery.menuItems["Select All"].click() - //Разворачиваем приложение на весь экран - XCUIApplication().buttons[XCUIIdentifierFullScreenWindow].click() - XCUIApplication().buttons["Group in Container"].click() + statusBar.openInFullScreen() // TODO: Reduce window's size - //assertLabel(text: "Container") + navigator + .groupInContainer() + .assertFirstCell(text: "Container") } func testChangeSize() { @@ -108,7 +102,7 @@ final class CanvasTests: DesignerTests { .deselect(dx: 0.61, dy: 0.61) canvas - .select(dx: 0.55, dy: 0.55) // same as range + .select(dx: 0.55, dy: 0.55) // same as arrange } override func tearDown() { From b54d45c9db45d551077494a81a7ad46d90629739 Mon Sep 17 00:00:00 2001 From: Vitalii Perov Date: Wed, 12 Jun 2024 19:49:48 +0300 Subject: [PATCH 4/9] Add Status Bar Object --- .../PageObjects/Panels/StatusBar.swift | 37 ++++++++++++++ .../Tests/CanvasTests.swift | 48 ++++++++----------- 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift b/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift index 14dbb321..62323d36 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift @@ -8,12 +8,35 @@ import XCTest class StatusBar: ProjectPanel { + var statusBar: XCUIElement { app.menuBars.firstMatch } + var fileMenu: XCUIElement {statusBar.menuBarItems["File"].firstMatch} + var editMenu: XCUIElement { statusBar.menuBarItems["Edit"].firstMatch } + var fileNewMenu: XCUIElement {statusBar.menuItems["New"].firstMatch} + var selectAllMenu: XCUIElement { statusBar.menuItems["Select All"].firstMatch } + var undoMenu: XCUIElement {statusBar.menuItems["Undo"].firstMatch} + + var redoMenu: XCUIElement {statusBar.menuItems["Redo"].firstMatch} + + @discardableResult + func clickFile() -> Self { + fileMenu.click() + + return self + } + + @discardableResult + func clickFileNew() -> Self { + fileNewMenu.click() + + return self + } + @discardableResult func clickEdit() -> Self { editMenu.click() @@ -27,6 +50,20 @@ class StatusBar: ProjectPanel { return self } + + @discardableResult + func clickUndoMenu() -> Self { + undoMenu.click() + + return self + } + + @discardableResult + func clickRedoMenu() -> Self { + redoMenu.click() + + return self + } @discardableResult func openInFullScreen() -> Self { diff --git a/VoiceOverDesignerUITests/Tests/CanvasTests.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift index 620c3e09..f4b11893 100644 --- a/VoiceOverDesignerUITests/Tests/CanvasTests.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -37,40 +37,34 @@ final class CanvasTests: DesignerTests { XCTAssertTrue(app.staticTexts["Add your screenshot"].exists) assertNavigatorElements(count: 0) - let menuBarsQuery = app.menuBars - let editMenuBarItem = menuBarsQuery.menuBarItems["Edit"] - editMenuBarItem.click() - menuBarsQuery.menuItems["Undo"].click() + statusBar + .clickEdit() + .clickUndoMenu() XCTAssertFalse(app.staticTexts["Add your screenshot"].exists) assertNavigatorElements(count: 1) - //editMenuBarItem.click() - //menuBarsQuery.menuItems["Redo"].click() - //XCTAssertTrue(app.staticTexts["Add your screenshot"].exists) + /*statusBar + .clickEdit() + .clickRedoMenu() + XCTAssertTrue(app.staticTexts["Add your screenshot"].exists)*/ } func testDragUndoRedo() { - let from = CGVector(dx: 0.45, dy: 0.45) - let to = CGVector(dx: 0.5, dy: 0.5) - - let window = app.windows.firstMatch - let start = window.coordinate(withNormalizedOffset: from) - let finish = window.coordinate(withNormalizedOffset: to) - - start.press(forDuration: 0.01, thenDragTo: finish) + canvas + .drag(from: 0.45, to: 0.5) - let menuBarsQuery = app.menuBars - let editMenuBarItem = menuBarsQuery.menuBarItems["Edit"] - editMenuBarItem.click() - menuBarsQuery.menuItems["Undo"].click() - editMenuBarItem.click() - menuBarsQuery.menuItems["Redo"].click() + statusBar + .clickEdit() + .clickUndoMenu() + .clickEdit() + .clickRedoMenu() + } func testCreateOneElementContainer() { //Разворачиваем приложение на весь экран - XCUIApplication().buttons[XCUIIdentifierFullScreenWindow].click() + statusBar.openInFullScreen() XCUIApplication().buttons["Group in Container"].click() //assertLabel(text: "Container") @@ -113,13 +107,9 @@ final class CanvasTests: DesignerTests { private func createNewFile() { // Создаем новый документ - let menuBarsQuery = app.menuBars - - let fileMenu = menuBarsQuery.menuBarItems["File"] - fileMenu.click() - - let fileNewMenu = menuBarsQuery.menuItems["New"] - fileNewMenu.click() + statusBar + .clickFile() + .clickFileNew() } func drawRectangle() { From 815a96bd6f78cc7dccdce7bd83961bbcda5efcbb Mon Sep 17 00:00:00 2001 From: Vitalii Perov Date: Wed, 12 Jun 2024 20:28:21 +0300 Subject: [PATCH 5/9] Edit testDragUndoRedo added asserts --- VoiceOverDesignerUITests/Tests/CanvasTests.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/VoiceOverDesignerUITests/Tests/CanvasTests.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift index f4b11893..1a7514d7 100644 --- a/VoiceOverDesignerUITests/Tests/CanvasTests.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -52,13 +52,19 @@ final class CanvasTests: DesignerTests { func testDragUndoRedo() { canvas .drag(from: 0.45, to: 0.5) + .deselect(dx: 0.4, dy: 0.4) statusBar .clickEdit() .clickUndoMenu() + canvas + .select(dx: 0.41, dy: 0.41) + + statusBar .clickEdit() .clickRedoMenu() - + canvas + .select(dx: 0.55, dy: 0.55) } From eed1aa494965a898ef8a1058700c0d5c6a83d141 Mon Sep 17 00:00:00 2001 From: Vitalii Perov Date: Wed, 12 Jun 2024 20:28:21 +0300 Subject: [PATCH 6/9] Edit testDragUndoRedo added asserts --- .../PageObjects/Panels/Canvas.swift | 15 ++++ .../PageObjects/Panels/Navigator.swift | 12 +++ .../PageObjects/Panels/Settings.swift | 9 +++ .../PageObjects/Panels/StatusBar.swift | 7 ++ .../Tests/CanvasTests.swift | 79 ++++++++----------- 5 files changed, 75 insertions(+), 47 deletions(-) diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift index da1abf3e..04665e22 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Canvas.swift @@ -78,4 +78,19 @@ class Canvas: ProjectPanel { return self } + + @discardableResult + func assertNoElements() -> Self { + let assertNoElementsCanvas: () = XCTAssertTrue(app.staticTexts["Add your screenshot"].exists) + + return self + } + + @discardableResult + func assertHaveElements() -> Self { + let assertHaveElementsCanvas: () = XCTAssertFalse(app.staticTexts["Add your screenshot"].exists) + + return self + } + } diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift index 60310341..f9861da6 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Navigator.swift @@ -22,4 +22,16 @@ class Navigator: ProjectPanel { XCTAssertEqual(actualText, text, file: file, line: line) return self } + + @discardableResult + func assertElementsCount( + count: Int, + file: StaticString = #file, + line: UInt = #line + ) -> Self { + let cellsCount = navigator.cells.count + + XCTAssertEqual(cellsCount, count, file: file, line: line) + return self + } } diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift index 6a3aa1bc..a486f39e 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift @@ -180,4 +180,13 @@ extension XCUIElement { func inputEnter() { typeText("\r") } + + func inputText(text: String) { + let window = XCUIApplication().windows.firstMatch + + let labelComboBox = window.comboBoxes["LabelTextField"] + labelComboBox.click() + labelComboBox.typeText(text) + labelComboBox.typeKey(XCUIKeyboardKey.enter, modifierFlags: []) + } } diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift b/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift index 62323d36..394d40d5 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/StatusBar.swift @@ -71,4 +71,11 @@ class StatusBar: ProjectPanel { return self } + + @discardableResult + func closeWindow() -> Self { + app.buttons[XCUIIdentifierCloseWindow].click() + + return self + } } diff --git a/VoiceOverDesignerUITests/Tests/CanvasTests.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift index 1a7514d7..49924d6e 100644 --- a/VoiceOverDesignerUITests/Tests/CanvasTests.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -19,33 +19,43 @@ final class CanvasTests: DesignerTests { } func testExample() { - input(text: "City") + settings + .app.inputText(text: "City") clickButtonTrait() - assertNavigatorFirstCell(text: "City. Button.") + navigator + .assertFirstCell(text: "City. Button.") } func testExample2() { - input(text: "Country") + settings + .app.inputText(text: "Country") clickButtonTrait() - assertNavigatorFirstCell(text: "Country. Button.") + navigator + .assertFirstCell(text: "Country. Button.") } func testDeleteUndoRedo() { XCUIApplication().typeKey(XCUIKeyboardKey.delete, modifierFlags: []) - XCTAssertTrue(app.staticTexts["Add your screenshot"].exists) - assertNavigatorElements(count: 0) + canvas + .assertNoElements() + navigator + .assertElementsCount(count: 0) statusBar .clickEdit() .clickUndoMenu() - XCTAssertFalse(app.staticTexts["Add your screenshot"].exists) - assertNavigatorElements(count: 1) + canvas + .assertHaveElements() + navigator + .assertElementsCount(count: 1) /*statusBar .clickEdit() .clickRedoMenu() - XCTAssertTrue(app.staticTexts["Add your screenshot"].exists)*/ + canvas + .assertNoElements()*/ + } @@ -70,10 +80,11 @@ final class CanvasTests: DesignerTests { func testCreateOneElementContainer() { //Разворачиваем приложение на весь экран - statusBar.openInFullScreen() - XCUIApplication().buttons["Group in Container"].click() - - //assertLabel(text: "Container") + statusBar + .openInFullScreen() + navigator + .groupInContainer() + .assertFirstCell(text: "Container") } func testCreateTwoElementContainer() { @@ -85,7 +96,8 @@ final class CanvasTests: DesignerTests { .clickEdit() .clickSelectAll() - statusBar.openInFullScreen() // TODO: Reduce window's size + statusBar + .openInFullScreen() // TODO: Reduce window's size navigator .groupInContainer() @@ -119,16 +131,8 @@ final class CanvasTests: DesignerTests { } func drawRectangle() { - canvas.drag(from: 0.4, to: 0.5) - } - - func input(text: String) { - let window = XCUIApplication().windows.firstMatch - - let labelComboBox = window.comboBoxes["LabelTextField"] - labelComboBox.click() - labelComboBox.typeText(text) - labelComboBox.typeKey(XCUIKeyboardKey.enter, modifierFlags: []) + canvas + .drag(from: 0.4, to: 0.5) } func clickButtonTrait() { @@ -136,29 +140,10 @@ final class CanvasTests: DesignerTests { window.checkBoxes["Button"].click() } - func assertNavigatorFirstCell(text: String, file: StaticString = #file, line: UInt = #line) { - let window = XCUIApplication().windows.firstMatch - - let navigator = window.outlines.firstMatch - let actualText = navigator.cells.staticTexts.firstMatch.value as? String - - XCTAssertEqual(actualText, text, file: file, line: line) - } - - func assertNavigatorElements(count: Int, file: StaticString = #file, line: UInt = #line) { - let window = XCUIApplication().windows.firstMatch - - let navigator = window.outlines.firstMatch - let cellsCount = navigator.cells.count - - XCTAssertEqual(cellsCount, count, file: file, line: line) - } - func closeWindowAndDelete() { - let window = XCUIApplication().windows.firstMatch - - window.buttons[XCUIIdentifierCloseWindow].click() - window.sheets.buttons["Delete"].click() + statusBar + .closeWindow() + settings + .delete() } - } From a51282f933b0439e85ed4caa004c4336e0186372 Mon Sep 17 00:00:00 2001 From: Vitalii Perov Date: Sat, 29 Jun 2024 14:00:29 +0300 Subject: [PATCH 7/9] All functions in PageObject --- .../PageObjects/Panels/Settings.swift | 5 +++++ VoiceOverDesignerUITests/Tests/CanvasTests.swift | 13 ++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift index a486f39e..9b60a719 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift @@ -165,6 +165,11 @@ class Settings: ProjectPanel { func customDescriptionValue() -> String? { return customDescriptionValueField.value as? String } + + func clickButtonTrait() { + let window = XCUIApplication().windows.firstMatch + window.checkBoxes["Button"].click() + } } extension XCUIElement { diff --git a/VoiceOverDesignerUITests/Tests/CanvasTests.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift index 49924d6e..64ce9c86 100644 --- a/VoiceOverDesignerUITests/Tests/CanvasTests.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -21,7 +21,9 @@ final class CanvasTests: DesignerTests { func testExample() { settings .app.inputText(text: "City") - clickButtonTrait() + + settings + .clickButtonTrait() navigator .assertFirstCell(text: "City. Button.") @@ -30,7 +32,9 @@ final class CanvasTests: DesignerTests { func testExample2() { settings .app.inputText(text: "Country") - clickButtonTrait() + + settings + .clickButtonTrait() navigator .assertFirstCell(text: "Country. Button.") @@ -135,11 +139,6 @@ final class CanvasTests: DesignerTests { .drag(from: 0.4, to: 0.5) } - func clickButtonTrait() { - let window = XCUIApplication().windows.firstMatch - window.checkBoxes["Button"].click() - } - func closeWindowAndDelete() { statusBar .closeWindow() From 2af24aca998f5de379acaac38aa2d3305a18b045 Mon Sep 17 00:00:00 2001 From: Vitalii Perov Date: Sat, 29 Jun 2024 14:33:39 +0300 Subject: [PATCH 8/9] Refactoring tests --- .../PageObjects/Panels/Settings.swift | 11 ++--------- VoiceOverDesignerUITests/Tests/CanvasTests.swift | 8 ++------ 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift index 9b60a719..6875b67e 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift @@ -170,6 +170,7 @@ class Settings: ProjectPanel { let window = XCUIApplication().windows.firstMatch window.checkBoxes["Button"].click() } + } extension XCUIElement { @@ -183,15 +184,7 @@ extension XCUIElement { } func inputEnter() { - typeText("\r") + typeKey(XCUIKeyboardKey.enter, modifierFlags: []) } - func inputText(text: String) { - let window = XCUIApplication().windows.firstMatch - - let labelComboBox = window.comboBoxes["LabelTextField"] - labelComboBox.click() - labelComboBox.typeText(text) - labelComboBox.typeKey(XCUIKeyboardKey.enter, modifierFlags: []) - } } diff --git a/VoiceOverDesignerUITests/Tests/CanvasTests.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift index 64ce9c86..76151ebf 100644 --- a/VoiceOverDesignerUITests/Tests/CanvasTests.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -20,9 +20,7 @@ final class CanvasTests: DesignerTests { func testExample() { settings - .app.inputText(text: "City") - - settings + .inputLabel("City") .clickButtonTrait() navigator @@ -31,9 +29,7 @@ final class CanvasTests: DesignerTests { func testExample2() { settings - .app.inputText(text: "Country") - - settings + .inputLabel("Country") .clickButtonTrait() navigator From 2499bcf78453787db80716008b4085f564e14551 Mon Sep 17 00:00:00 2001 From: Vitalii Perov Date: Sat, 29 Jun 2024 14:42:43 +0300 Subject: [PATCH 9/9] Refactoring --- VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift | 5 +++-- VoiceOverDesignerUITests/Tests/CanvasTests.swift | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift index 6875b67e..60969802 100644 --- a/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift +++ b/VoiceOverDesignerUITests/PageObjects/Panels/Settings.swift @@ -167,7 +167,6 @@ class Settings: ProjectPanel { } func clickButtonTrait() { - let window = XCUIApplication().windows.firstMatch window.checkBoxes["Button"].click() } @@ -186,5 +185,7 @@ extension XCUIElement { func inputEnter() { typeKey(XCUIKeyboardKey.enter, modifierFlags: []) } - + func inputDelete() { + typeKey(XCUIKeyboardKey.delete, modifierFlags: []) + } } diff --git a/VoiceOverDesignerUITests/Tests/CanvasTests.swift b/VoiceOverDesignerUITests/Tests/CanvasTests.swift index 76151ebf..e91030af 100644 --- a/VoiceOverDesignerUITests/Tests/CanvasTests.swift +++ b/VoiceOverDesignerUITests/Tests/CanvasTests.swift @@ -37,7 +37,7 @@ final class CanvasTests: DesignerTests { } func testDeleteUndoRedo() { - XCUIApplication().typeKey(XCUIKeyboardKey.delete, modifierFlags: []) + app.inputDelete() canvas .assertNoElements() navigator