diff --git a/src/App/Lists/ItemLayouts/CustomFields/BooleanCustomFieldItemLayout.xaml b/src/App/Lists/ItemLayouts/CustomFields/BooleanCustomFieldItemLayout.xaml
index c50cf53eb..6c7d22ed7 100644
--- a/src/App/Lists/ItemLayouts/CustomFields/BooleanCustomFieldItemLayout.xaml
+++ b/src/App/Lists/ItemLayouts/CustomFields/BooleanCustomFieldItemLayout.xaml
@@ -33,7 +33,8 @@
StyleClass="box-label"
Grid.Row="0"
Grid.Column="0"
- IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}" />
+ IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
+ AutomationId="BooleanCustomFieldNameLabel" />
+ IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
+ AutomationId="BooleanCustomFieldValueLabel" />
+ Grid.RowSpan="2"
+ AutomationId="BooleanCustomFieldValueToggle" />
+ Grid.Column="0"
+ AutomationId="HiddenCustomFieldNameLabel" />
+ IsVisible="{Binding ShowHiddenValue}"
+ AutomationId="HiddenCustomFieldValueLabel" />
+ AutomationProperties.Name="{Binding Field.Name}"
+ AutomationId="HiddenCustomFieldValueEntry">
@@ -74,7 +77,8 @@
Grid.Column="1"
Grid.RowSpan="2"
AutomationProperties.IsInAccessibleTree="True"
- AutomationProperties.Name="{u:I18n ToggleVisibility}" />
+ AutomationProperties.Name="{u:I18n ToggleVisibility}"
+ AutomationId="HiddenCustomFieldShowValueButton" />
+ Grid.Column="0"
+ AutomationId="LinkedCustomFieldNameLabel" />
+ IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
+ AutomationId="LinkedCustomFieldValueLabel" />
@@ -44,7 +46,8 @@
ItemsSource="{Binding LinkedFieldOptions, Mode=OneTime}"
SelectedIndex="{Binding LinkedFieldOptionSelectedIndex}"
ItemDisplayBinding="{Binding Key}"
- StyleClass="box-value" />
+ StyleClass="box-value"
+ AutomationId="LinkedCustomFieldValuePicker" />
+ AutomationProperties.Name="{u:I18n Options}"
+ AutomationId="LinkedCustomFieldOptionsButton" />
diff --git a/src/App/Lists/ItemLayouts/CustomFields/TextCustomFieldItemLayout.xaml b/src/App/Lists/ItemLayouts/CustomFields/TextCustomFieldItemLayout.xaml
index 238fbe0ab..23e243119 100644
--- a/src/App/Lists/ItemLayouts/CustomFields/TextCustomFieldItemLayout.xaml
+++ b/src/App/Lists/ItemLayouts/CustomFields/TextCustomFieldItemLayout.xaml
@@ -29,13 +29,15 @@
Text="{Binding Field.Name, Mode=OneWay}"
StyleClass="box-label"
Grid.Row="0"
- Grid.Column="0" />
+ Grid.Column="0"
+ AutomationId="TextCustomFieldNameLabel" />
+ IsVisible="{Binding IsEditing, Mode=OneWay, Converter={StaticResource inverseBool}}"
+ AutomationId="TextCustomFieldValueLabel" />
+ AutomationProperties.Name="{Binding Field.Name}"
+ AutomationId="TextCustomFieldValueEntry" />
+ AutomationProperties.Name="{u:I18n Copy}"
+ AutomationId="TextCustomFieldCopyValue" />
+ AutomationProperties.Name="{u:I18n Options}"
+ AutomationId="TextCustomFieldOptionsButton" />
diff --git a/src/App/Pages/Vault/CipherAddEditPage.xaml b/src/App/Pages/Vault/CipherAddEditPage.xaml
index 1ca611f48..772701cde 100644
--- a/src/App/Pages/Vault/CipherAddEditPage.xaml
+++ b/src/App/Pages/Vault/CipherAddEditPage.xaml
@@ -57,16 +57,16 @@
x:Key="deleteItem" />
-
+
-
+
-
+
-
+
+ HorizontalTextAlignment="Center"
+ AutomationId="PersonalOwnershipPolicyLabel"/>
@@ -116,7 +117,8 @@
x:Name="_typePicker"
ItemsSource="{Binding TypeOptions, Mode=OneTime}"
SelectedIndex="{Binding TypeSelectedIndex}"
- StyleClass="box-value" />
+ StyleClass="box-value"
+ AutomationId="ItemTypePicker" />
+ AutomationProperties.Name="{u:I18n Name}"
+ AutomationId="ItemNameEntry" />
+ AutomationProperties.Name="{u:I18n Username}"
+ AutomationId="LoginUsernameEntry" />
+ AutomationProperties.Name="{u:I18n GenerateUsername}"
+ AutomationId="GenerateUsernameButton" />
@@ -180,7 +185,8 @@
IsTextPredictionEnabled="False"
IsEnabled="{Binding Cipher.ViewPassword}"
AutomationProperties.IsInAccessibleTree="True"
- AutomationProperties.Name="{u:I18n Password}"/>
+ AutomationProperties.Name="{u:I18n Password}"
+ AutomationId="LoginPasswordEntry" />
+ IsVisible="{Binding Cipher.ViewPassword}"
+ AutomationId="CheckPasswordButton" />
+ IsVisible="{Binding Cipher.ViewPassword}"
+ AutomationId="ViewPasswordButton" />
+ IsVisible="{Binding Cipher.ViewPassword}"
+ AutomationId="RegeneratePasswordButton" />
@@ -247,7 +256,8 @@
Padding="0,15"
HorizontalOptions="Center"
VerticalOptions="FillAndExpand"
- VerticalTextAlignment="Center" />
+ VerticalTextAlignment="Center"
+ AutomationId="SetupTotpButton" />
+ AutomationProperties.Name="{u:I18n AuthenticatorKey}"
+ AutomationId="LoginTotpEntry" />
+ AutomationProperties.Name="{u:I18n CopyTotp}"
+ AutomationId="CopyTotpValueButton" />
+ AutomationProperties.Name="{u:I18n ScanQrTitle}"
+ />
@@ -293,7 +306,8 @@
+ StyleClass="box-value"
+ AutomationId="CardholderNameEntry" />
@@ -319,7 +333,8 @@
IsSpellCheckEnabled="False"
IsTextPredictionEnabled="False"
AutomationProperties.IsInAccessibleTree="True"
- AutomationProperties.Name="{u:I18n Number}" />
+ AutomationProperties.Name="{u:I18n Number}"
+ AutomationId="CardNumberEntry" />
+ AutomationProperties.Name="{u:I18n ToggleVisibility}"
+ AutomationId="ShowCardNumberButton" />
+ StyleClass="box-value"
+ AutomationId="CardBrandPicker" />
+ StyleClass="box-value"
+ AutomationId="CardExpirationMonthPicker" />
+ AutomationProperties.Name="{u:I18n ExpirationYear}"
+ AutomationId="CardExpirationYearEntry" />
@@ -387,7 +406,8 @@
IsSpellCheckEnabled="False"
IsTextPredictionEnabled="False"
AutomationProperties.IsInAccessibleTree="True"
- AutomationProperties.Name="{u:I18n SecurityCode}" />
+ AutomationProperties.Name="{u:I18n SecurityCode}"
+ AutomationId="CardSecurityCodeEntry" />
+ AutomationProperties.Name="{u:I18n ToggleVisibility}"
+ AutomationId="CardShowSecurityCodeButton" />
@@ -408,7 +429,8 @@
x:Name="_identityTitlePicker"
ItemsSource="{Binding IdentityTitleOptions, Mode=OneTime}"
SelectedIndex="{Binding IdentityTitleSelectedIndex}"
- StyleClass="box-value" />
+ StyleClass="box-value"
+ AutomationId="IdentityTitlePicker" />
+ AutomationProperties.Name="{u:I18n FirstName}"
+ AutomationId="IdentityFirstNameEntry" />
+ AutomationProperties.Name="{u:I18n MiddleName}"
+ AutomationId="IdentityMiddleNameEntry" />
+ AutomationProperties.Name="{u:I18n LastName}"
+ AutomationId="IdentityLastNameEntry" />
+ AutomationProperties.Name="{u:I18n Username}"
+ AutomationId="IdentityUsernameEntry" />
+ AutomationProperties.Name="{u:I18n Company}"
+ AutomationId="IdentityCompanyEntry" />
+ AutomationProperties.Name="{u:I18n SSN}"
+ AutomationId="IdentitySsnEntry" />
+ AutomationProperties.Name="{u:I18n PassportNumber}"
+ AutomationId="IdentityPassportNumberEntry" />
+ AutomationProperties.Name="{u:I18n LicenseNumber}"
+ AutomationId="IdentityLicenseNumberEntry" />
+ AutomationProperties.Name="{u:I18n Email}"
+ AutomationId="IdentityEmailEntry" />
+ AutomationProperties.Name="{u:I18n Phone}"
+ AutomationId="IdentityPhoneEntry" />
+ AutomationProperties.Name="{u:I18n Address1}"
+ AutomationId="IdentityAddressOneEntry" />
+ AutomationProperties.Name="{u:I18n Address2}"
+ AutomationId="IdentityAddressTwoEntry" />
+ AutomationProperties.Name="{u:I18n Address3}"
+ AutomationId="IdentityAddressThreeEntry" />
+ AutomationProperties.Name="{u:I18n CityTown}"
+ AutomationId="IdentityCityEntry" />
+ AutomationProperties.Name="{u:I18n StateProvince}"
+ AutomationId="IdentityStateEntry" />
+ AutomationProperties.Name="{u:I18n ZipPostalCode}"
+ AutomationId="IdentityPostalCodeEntry" />
+ AutomationProperties.Name="{u:I18n Country}"
+ AutomationId="IdentityCountryEntry" />
@@ -609,7 +648,7 @@
-
+
@@ -630,7 +669,8 @@
Grid.Row="1"
Grid.Column="0"
AutomationProperties.IsInAccessibleTree="True"
- AutomationProperties.Name="{u:I18n URI}" />
+ AutomationProperties.Name="{u:I18n URI}"
+ AutomationId="LoginUriEntry" />
+ AutomationProperties.Name="{u:I18n Options}"
+ AutomationId="LoginUriOptionsButton" />
+ Clicked="NewUri_Clicked"
+ AutomationId="LoginAddNewUriButton">
@@ -661,7 +703,8 @@
x:Name="_folderPicker"
ItemsSource="{Binding FolderOptions, Mode=OneTime}"
SelectedIndex="{Binding FolderSelectedIndex}"
- StyleClass="box-value" />
+ StyleClass="box-value"
+ AutomationId="FolderPicker" />
+ HorizontalOptions="End"
+ AutomationId="ItemFavoriteToggle" />
+ HorizontalOptions="End"
+ AutomationId="MasterPasswordRepromptToggle" />
@@ -706,7 +751,8 @@
effects:ScrollEnabledEffect.IsScrollEnabled="false"
Text="{Binding Cipher.Notes}"
AutomationProperties.IsInAccessibleTree="True"
- AutomationProperties.Name="{u:I18n Notes}" >
+ AutomationProperties.Name="{u:I18n Notes}"
+ AutomationId="ItemNotesEntry">
@@ -725,9 +771,11 @@
+ BindableLayout.ItemTemplateSelector="{StaticResource CustomFieldItemTemplateSelector}"
+ AutomationId="CustomFieldsList" />
+ Clicked="NewField_Clicked"
+ AutomationId="NewCustomFieldButton">
@@ -742,7 +790,8 @@
x:Name="_ownershipPicker"
ItemsSource="{Binding OwnershipOptions, Mode=OneTime}"
SelectedIndex="{Binding OwnershipSelectedIndex}"
- StyleClass="box-value" />
+ StyleClass="box-value"
+ AutomationId="ItemOwnershipPicker" />
@@ -753,7 +802,8 @@
-
+
@@ -763,15 +813,17 @@
-
+
+ HorizontalOptions="StartAndExpand"
+ AutomationId="CollectionItemNameLabel" />
+ HorizontalOptions="End"
+ AutomationId="CollectionItemSwitch" />
@@ -781,5 +833,4 @@
-