// // NextcloudUITests.swift // NextcloudUITests // // Created by Milen Pivchev on 5/19/23. // Copyright © 2023 Marino Faggiana. All rights reserved. // import XCTest final class LoginUITests: BaseUIXCTestCase { private let baseUrl = EnvVars.testServerUrl private let user = EnvVars.testUser private let userId = EnvVars.testUser private let password = EnvVars.testAppPassword private lazy var account = "\(userId) \(baseUrl)" let app = XCUIApplication() override func setUp() { app.launchArguments += ["UI_TESTING"] } func test_logIn_withProperParams_shouldLogInAndGoToHomeScreen() throws { app.launch() let loginButton = app.buttons["Log in"] XCTAssert(loginButton.waitForExistence(timeout: timeoutSeconds)) loginButton.tap() let serverAddressHttpsTextField = app.textFields["Server address https:// …"] serverAddressHttpsTextField.tap() serverAddressHttpsTextField.typeText(baseUrl) let button = app.windows.children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .button).element(boundBy: 0) button.tap() let webViewsQuery = app.webViews.webViews.webViews let loginButton2 = webViewsQuery/*@START_MENU_TOKEN@*/.buttons["Log in"]/*[[".otherElements.matching(identifier: \"Nextcloud\")",".otherElements[\"main\"].buttons[\"Log in\"]",".buttons[\"Log in\"]"],[[[-1,2],[-1,1],[-1,0,1]],[[-1,2],[-1,1]]],[0]]@END_MENU_TOKEN@*/ XCTAssert(loginButton2.waitForExistence(timeout: timeoutSeconds)) waitForEnabledAndHittable(object: loginButton2) loginButton2.tap() let element = webViewsQuery/*@START_MENU_TOKEN@*/.otherElements["main"]/*[[".otherElements[\"Login – Nextcloud\"].otherElements[\"main\"]",".otherElements[\"main\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.children(matching: .other).element(boundBy: 1) let usernameTextField = element.children(matching: .other).element(boundBy: 2).children(matching: .textField).element XCTAssert(usernameTextField.waitForExistence(timeout: timeoutSeconds)) usernameTextField.tap() usernameTextField.typeText(user) let passwordTextField = element.children(matching: .other).element(boundBy: 4).children(matching: .secureTextField).element passwordTextField.tap() passwordTextField.typeText(user) let loginButton3 = webViewsQuery/*@START_MENU_TOKEN@*/.buttons["Log in"]/*[[".otherElements[\"Login – Nextcloud\"]",".otherElements[\"main\"].buttons[\"Log in\"]",".buttons[\"Log in\"]"],[[[-1,2],[-1,1],[-1,0,1]],[[-1,2],[-1,1]]],[0]]@END_MENU_TOKEN@*/ XCTAssert(loginButton3.waitForExistence(timeout: timeoutSeconds)) loginButton3.tap() let grantAccessButton = webViewsQuery/*@START_MENU_TOKEN@*/.buttons["Grant access"]/*[[".otherElements.matching(identifier: \"Nextcloud\")",".otherElements[\"main\"].buttons[\"Grant access\"]",".buttons[\"Grant access\"]"],[[[-1,2],[-1,1],[-1,0,1]],[[-1,2],[-1,1]]],[0]]@END_MENU_TOKEN@*/ XCTAssert(grantAccessButton.waitForExistence(timeout: timeoutSeconds)) waitForEnabledAndHittable(object: grantAccessButton) grantAccessButton.tap() // Check if we are in the home screen XCTAssert(app.navigationBars["Nextcloud"].waitForExistence(timeout: timeoutSeconds)) XCTAssert(app.tabBars["Tab Bar"].waitForExistence(timeout: timeoutSeconds)) } }