| Index: ios/chrome/browser/ui/settings/passwords_settings_egtest.mm
|
| diff --git a/ios/chrome/browser/ui/settings/passwords_settings_egtest.mm b/ios/chrome/browser/ui/settings/passwords_settings_egtest.mm
|
| index aba0b2483db43b8cc018a8f5165bfe3346f3fc30..243c2e3bee5bbc3072ed5befecc299787adfb837 100644
|
| --- a/ios/chrome/browser/ui/settings/passwords_settings_egtest.mm
|
| +++ b/ios/chrome/browser/ui/settings/passwords_settings_egtest.mm
|
| @@ -72,11 +72,27 @@ id<GREYMatcher> EditButton() {
|
| // same for multiple types of copied items (just "Copy"). Therefore the
|
| // matchers here check the relative position of the Copy buttons to their
|
| // respective section headers as well. The scheme of the vertical order is:
|
| +// Site header
|
| +// Copy (site) button
|
| // Username header
|
| // Copy (username) button
|
| // Password header
|
| // Copy (password) button
|
|
|
| +id<GREYMatcher> SiteHeader() {
|
| + return grey_allOf(
|
| + grey_accessibilityLabel(
|
| + l10n_util::GetNSString(IDS_IOS_SHOW_PASSWORD_VIEW_SITE)),
|
| + grey_accessibilityTrait(UIAccessibilityTraitHeader), nullptr);
|
| +}
|
| +
|
| +id<GREYMatcher> UsernameHeader() {
|
| + return grey_allOf(
|
| + grey_accessibilityLabel(
|
| + l10n_util::GetNSString(IDS_IOS_SHOW_PASSWORD_VIEW_USERNAME)),
|
| + grey_accessibilityTrait(UIAccessibilityTraitHeader), nullptr);
|
| +}
|
| +
|
| id<GREYMatcher> PasswordHeader() {
|
| return grey_allOf(
|
| grey_accessibilityLabel(
|
| @@ -84,15 +100,40 @@ id<GREYMatcher> PasswordHeader() {
|
| grey_accessibilityTrait(UIAccessibilityTraitHeader), nullptr);
|
| }
|
|
|
| -// Matcher for the Copy username button in Password Details view. This is the
|
| -// button above the Password section header.
|
| -id<GREYMatcher> CopyUsernameButton() {
|
| - GREYLayoutConstraint* above = [GREYLayoutConstraint
|
| +GREYLayoutConstraint* Above() {
|
| + return [GREYLayoutConstraint
|
| layoutConstraintWithAttribute:kGREYLayoutAttributeBottom
|
| relatedBy:kGREYLayoutRelationLessThanOrEqual
|
| toReferenceAttribute:kGREYLayoutAttributeTop
|
| multiplier:1.0
|
| constant:0.0];
|
| +}
|
| +
|
| +GREYLayoutConstraint* Below() {
|
| + return [GREYLayoutConstraint
|
| + layoutConstraintWithAttribute:kGREYLayoutAttributeTop
|
| + relatedBy:kGREYLayoutRelationGreaterThanOrEqual
|
| + toReferenceAttribute:kGREYLayoutAttributeBottom
|
| + multiplier:1.0
|
| + constant:0.0];
|
| +}
|
| +
|
| +// Matcher for the Copy site button in Password Details view.
|
| +id<GREYMatcher> CopySiteButton() {
|
| + return grey_allOf(
|
| + ButtonWithAccessibilityLabel(
|
| + [NSString stringWithFormat:@"%@: %@",
|
| + l10n_util::GetNSString(
|
| + IDS_IOS_SHOW_PASSWORD_VIEW_SITE),
|
| + l10n_util::GetNSString(
|
| + IDS_IOS_SETTINGS_SITE_COPY_BUTTON)]),
|
| + grey_layout(@[ Below() ], SiteHeader()),
|
| + grey_layout(@[ Above() ], UsernameHeader()),
|
| + grey_layout(@[ Above() ], PasswordHeader()), nullptr);
|
| +}
|
| +
|
| +// Matcher for the Copy username button in Password Details view.
|
| +id<GREYMatcher> CopyUsernameButton() {
|
| return grey_allOf(
|
| ButtonWithAccessibilityLabel([NSString
|
| stringWithFormat:@"%@: %@",
|
| @@ -100,18 +141,13 @@ id<GREYMatcher> CopyUsernameButton() {
|
| IDS_IOS_SHOW_PASSWORD_VIEW_USERNAME),
|
| l10n_util::GetNSString(
|
| IDS_IOS_SETTINGS_USERNAME_COPY_BUTTON)]),
|
| - grey_layout(@[ above ], PasswordHeader()), nullptr);
|
| + grey_layout(@[ Below() ], SiteHeader()),
|
| + grey_layout(@[ Below() ], UsernameHeader()),
|
| + grey_layout(@[ Above() ], PasswordHeader()), nullptr);
|
| }
|
|
|
| -// Matcher for the Copy password button in Password Details view. This is the
|
| -// button below the Password section header.
|
| +// Matcher for the Copy password button in Password Details view.
|
| id<GREYMatcher> CopyPasswordButton() {
|
| - GREYLayoutConstraint* below = [GREYLayoutConstraint
|
| - layoutConstraintWithAttribute:kGREYLayoutAttributeTop
|
| - relatedBy:kGREYLayoutRelationGreaterThanOrEqual
|
| - toReferenceAttribute:kGREYLayoutAttributeBottom
|
| - multiplier:1.0
|
| - constant:0.0];
|
| return grey_allOf(
|
| ButtonWithAccessibilityLabel([NSString
|
| stringWithFormat:@"%@: %@",
|
| @@ -119,7 +155,9 @@ id<GREYMatcher> CopyPasswordButton() {
|
| IDS_IOS_SHOW_PASSWORD_VIEW_PASSWORD),
|
| l10n_util::GetNSString(
|
| IDS_IOS_SETTINGS_PASSWORD_COPY_BUTTON)]),
|
| - grey_layout(@[ below ], PasswordHeader()), nullptr);
|
| + grey_layout(@[ Below() ], SiteHeader()),
|
| + grey_layout(@[ Below() ], UsernameHeader()),
|
| + grey_layout(@[ Below() ], PasswordHeader()), nullptr);
|
| }
|
|
|
| } // namespace
|
| @@ -380,4 +418,31 @@ id<GREYMatcher> CopyPasswordButton() {
|
| [self clearPasswordStore];
|
| }
|
|
|
| +// Checks that attempts to copy a site URL provide appropriate feedback.
|
| +- (void)testCopySiteToast {
|
| + [self scopedEnablePasswordManagementAndViewingUI];
|
| +
|
| + // Saving a form is needed for using the "password details" view.
|
| + [self saveExamplePasswordForm];
|
| +
|
| + [self openPasswordSettings];
|
| +
|
| + [[EarlGrey selectElementWithMatcher:Entry(@"https://example.com, user")]
|
| + performAction:grey_tap()];
|
| +
|
| + // Check the snackbar.
|
| + [[EarlGrey selectElementWithMatcher:CopySiteButton()]
|
| + performAction:grey_tap()];
|
| + [[GREYUIThreadExecutor sharedInstance] drainUntilIdle];
|
| + NSString* snackbarLabel =
|
| + l10n_util::GetNSString(IDS_IOS_SETTINGS_SITE_WAS_COPIED_MESSAGE);
|
| + [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(snackbarLabel)]
|
| + assertWithMatcher:grey_notNil()];
|
| +
|
| + [self tapBackArrow];
|
| + [self tapBackArrow];
|
| + [self tapDone];
|
| + [self clearPasswordStore];
|
| +}
|
| +
|
| @end
|
|
|