Очищение текстового поля (автотести написаные для iOS на swift)

На проете начали писать тесты для приложения на iOS - swift предоставляет возвожность ui тестов вместе с разработкой.

Пишу тесты на форму логина и необходимо очищать поле ввода.

Пробовала передавать пустую строку или передавать nill. Пока не помогло.
Очистить нужно в поле textField. Может у кого-то тоже была такая проблема

let passwdVisibleTrueCellsQuery = tablesQuery.cells.containing(.button, identifier:"passwd visible true")
let textField = passwdVisibleTrueCellsQuery.children(matching: .textField).element
textField.tap()
textField.typeText("")

let secureTextField = passwdVisibleTrueCellsQuery.children(matching: .secureTextField).element
secureTextField.tap()
secureTextField.tap()
secureTextField.typeText("")
extension XCUIElement {

func focus() {
    if !self.isFocused {
        self.tap()
    }
}

var isFocused: Bool {
    return self.value(forKey: "hasKeyboardFocus") as? Bool ?? false
}

func clearText() {
    guard let stringValue = self.value as? String else {
        XCTFail("Tried to get value from element.")
        return
    }
    self.focus()
    let deleteString = String(repeating: XCUIKeyboardKey.delete.rawValue, count: stringValue.characters.count)
    self.typeText(deleteString)
}

}

После чего можно вызывать element.clearText()

1 лайк

Дуже дякую, зараз буде пробувати

Сделал попроще:
func testB1ProfilLast(){

    let app = XCUIApplication()
  
    let deleteKey = app.keys["delete"]//кнопка на клавиатуре
     
    let elementsQuery = app.scrollViews.otherElements
    let buttonEdit = elementsQuery.images["EditProfileIcon"]
    buttonEdit.tap()//переход в режим редактирования

    let textLastName = app.scrollViews.otherElements.textFields["Last Name"]
    let textValue = textLastName.value.debugDescription
    let n = textValue.count - 10 //не удалось избавиться по простому от опционал поэтому лайфхак
    
    for _ in 1...n {
         deleteKey.tap()
    }
   
    textLastName.typeText("Testov")
    let okiconImage = elementsQuery.images["OkIcon"]
    okiconImage.tap()
}
1 лайк

Мне просто интересно - а чем этот метод проще ? :slight_smile:

Я только учусь swift и писать автотесты и написание функци кажется труднее.
Может что посоветуете к изучению?

https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 для начала.
Для изучения свифта достаточно бесплатной книги от apple + youtube.

Да свифт я изучаю именно как вы сказали.
По XCUI не встречалось вам каихнить материалов?
Но есть нюансы именно XCUI, по которым очень мало информации и зачастую приходиться лазить по форумам(аля stackoverflow) и искать схожие проблемы.

Сейчас к примеру затык wait, sleep не срабатывал потому что приложение не уходит в режим ожидания.
Кейс: надо проверить работу записи аудио, нажимается кнопка записи и нужно подождать 5,10…25 сек(мин) а потом нажать кнопку стоп.
Вот waitForExpectetion не отрабатывает(((

К сожалению по XCUITest информации действительно мало и приходится изучать официальные доки.

Так а какой у вас Expectation ? Если вам нужно просто что бы тест подождал 5, 10 и больше секунд, то вам нужно использовать sleep а не ожидание. Потому что вы ничего не ожидаете, вы просто хотите подождать пока запись произойдет.

Работает в том случае, когда приложение именно уходит в сон(логично оно так и называется),
а в моем случае приложение в сон не уходит, оно производит запись, таймер наращивается и т.п…

Или допустим все мои кейсы разбиты в XCUITest по func, так удобнее их запускать по отдельности в отличии от step(да и еще не понял как правильно им работать).
Так вот как запускать из консоли тесты и как выводить в виде отчета(в какую нить таблицу) ХЗ.

Или как в тех же тестах запускать каждый тест без переустановки приложения…нет всех этих мелочей…

У меня в тесте я с помощью sleep жду несколько секунд пока мне на тестовый сервис прийдет код подтверждение и потом я читаю этот код и продолжаю свой тест. Приложение висит открытым при этом. Но как вариант, вы можете использовать XCTWaiter и ждать какого небудь несуществующего элемента. Он через указаное время вернет false и вы себе просто игнорируете этот результат.

Для этого есть test-only флаг в xcodebuild . xcode - How to use xcodebuild with -only-testing and -skip-testing flag? - Stack Overflow