Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

swift
mobile
ios
Теги: #<Tag:0x00007fedbb0eb748> #<Tag:0x00007fedbb0eb590> #<Tag:0x00007fedbb0eb400>

(Irina Melnik) #1

На проете начали писать тесты для приложения на 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("")

(Andrew Zakordonets) #2
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()


(Irina Melnik) #3

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


(Алексей ) #4

Сделал попроще:
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()
}

(Andrew Zakordonets) #5

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


(Алексей ) #6

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


(Andrew Zakordonets) #7

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


(Алексей ) #8

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


(Алексей ) #9

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


(Andrew Zakordonets) #10

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


(Andrew Zakordonets) #11

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


(Алексей ) #12

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


(Алексей ) #13

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

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


(Andrew Zakordonets) #14

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


(Andrew Zakordonets) #15

Для этого есть test-only флаг в xcodebuild . https://stackoverflow.com/questions/39427263/how-to-use-xcodebuild-with-only-testing-and-skip-testing-flag