Автозаполнение надежного пароля появляется в симуляторе iOS

#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, так что приветствую это!