#ios #autofill #xcuitest #uitest
#iOS #автозаполнение #xcuitest #uitest
Вопрос:
Наши наборы тестов пользовательского интерфейса демонстрируют некоторое неожиданное поведение, когда на экране создания пароля периодически автоматически вводятся имя пользователя и пароль — это приводит к сбою теста.
Процесс выглядит примерно так:
- Нажмите в первом поле для создания пароля
- Введите пароль
- Нажмите в поле подтверждения пароля
- Введите тот же пароль
Этот последний шаг завершается неудачей, поскольку пароли в обоих полях были заполнены автоматически.
Это происходит примерно в одном из каждых десяти-двадцати тестовых запусков.
Мы понимаем, что автозаполнение пароля никогда не должно отображаться ни в одном симуляторе, поэтому это вообще сбивает с толку. Есть ли что-нибудь, что мы можем сделать, чтобы дополнительно отключить автозаполнение или иным образом предотвратить это?
Комментарии:
1. Это было отправлено как rdr: // 49643422 / Обратная связь FB5665786
2. Если у кого-то еще возникла проблема, мы немного изменили тест пользовательского интерфейса, чтобы вручную отключить клавиатуру перед переходом ко второму полю ввода.
3. Раньше это происходило только с перерывами, но в iOS 16 это теперь происходит каждый раз для меня.
Ответ №1:
перейдите в настройки симулятора -> Пароли -> Включить, а затем отключить автозаполнение паролей.
введите любой пароль
Ответ №2:
Возникла та же проблема. Что было полезно для меня, так это зайти в настройки симулятора -> Пароли -> Включить, а затем отключить автозаполнение паролей.
Ответ №3:
Не уверен, что так было с самого начала, но настройки isSecureTextEntry = true
достаточно, чтобы вызвать и эту ошибку (по крайней мере, в Xcode 12.2).
Таким образом, обходной путь, который сработал для меня, был:
let field = UITextField()
if #available(iOS 11.0, *) {
#if targetEnvironment(simulator)
// Do Not enable '.password' or '.newPassword' or 'isSecureTextEntry' text content type on simulator as it ends up with annoying behaviour:
// 'Strong Password' yellow glitch preventing from editing field.
print("Simulator! not setting password-like text content type")
#else
field.textContentType = .password
field.isSecureTextEntry = true
#endif
}
field.placeholder = "Password"
Комментарии:
1. У меня это не работает. Использование симулятора 14.2 — iPhone 12 Pro Max
Ответ №4:
Перейдите к настройкам пароля в вашем симуляторе. Закройте автозаполнение (если оно уже закрыто, откройте и закройте). Коснитесь рекомендации по безопасности и закройте Обнаружение скомпрометированных паролей. Все готово..
Ответ №5:
Хотя вы можете изменить «Автозаполнение паролей» вручную в симуляторе, у меня это не сработало с автоматическими тестами пользовательского интерфейса на сервере сборки, которые сбрасываются при каждом запуске и, следовательно, включены по умолчанию. Кроме того, в одной из наших библиотек нет фрагмента x86_64, поэтому она не может запускаться в симуляторе iOS13.x (поддержка arm64-simulator появилась в iOS14).
Вместо этого я обнаружил, что вы можете управлять Settings.app через XCUITest, поэтому первая часть моего теста отключает «Автозаполнение паролей», а затем запускает мой собственный тест.
Обратите внимание на использование обоих Settings.app и Springboard, поскольку диалоговые окна с паролем принадлежат Springboard.
let settingsApp = XCUIApplication(bundleIdentifier: "com.apple.Preferences")
let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
settingsApp.launch()
settingsApp.tables.staticTexts["PASSWORDS"].tap()
let passcodeInput = springboard.secureTextFields["Passcode field"]
passcodeInput.tap()
passcodeInput.typeText("abcr") // it accepts anything in simulator
settingsApp.tables.cells["PasswordOptionsCell"].buttons["chevron"].tap()
settingsApp.switches["AutoFill Passwords"].tap()
// launch my own app and start UI test
let app = XCUIApplication()
app.launch()
Я пытался проверить, включен ли переключатель с помощью .isSelected
и только тогда его изменить, но .isSelected
кажется, что XCUIElement для переключателей сломан.
Ответ №6:
Вы можете отключить автозаполнение пароля в симуляторе, используя это:
Не уверен, что нужны все три файла, но это то, что изменяет переключатель в приложении «Настройки».
plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/$SIMULATOR_ID/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/ConfigurationProfiles/UserSettings.plist
plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/$SIMULATOR_ID/data/Library/UserConfigurationProfiles/EffectiveUserSettings.plist
plutil -replace restrictedBool.allowPasswordAutoFill.value -bool NO ~/Library/Developer/CoreSimulator/Devices/$SIMULATOR_ID/data/Library/UserConfigurationProfiles/PublicInfo/PublicEffectiveUserSettings.plist
Вы можете получить SIMULATOR_ID
из xcrun simctl list
Тестировал это только на iOS 16.4
Ответ №7:
Это ошибка iOS 14, которая появляется только при использовании симулятора.
Способ исправить это — установить iOS 13.7:
в Xcode open щелкните Настройки, затем Компоненты.
Выберите, загрузите и установите операционную систему iOS 13.7 на свой симулятор.
Затем снова запустите ваше приложение. Вы можете проверить свою версию iOS на верхнем ярлыке симулятора. Он должен отображать правильный.
Комментарии:
1. Ошибка изначально была обнаружена в iOS12, поэтому я не думаю, что это только iOS14. Возможно, это стало происходить чаще с iOS14, хотя, учитывая увеличение активности здесь.
2. У меня это работает в iOS 13.7 без каких-либо проблем.
3. Не конкретно iOS 14, как сказал @ Estel, однако у меня это работает на iOS 13.7, так что приветствую это!