[pv]add integration test for original untappable web view link behind context menu bug#182111
Conversation
c01d14e to
2aa278b
Compare
There was a problem hiding this comment.
Code Review
This pull request adds an integration test to reproduce a bug where a web view link becomes untappable after a context menu is shown and dismissed. The changes include new native iOS test code, the corresponding Dart UI for the test page, and a native platform view implementation for a WKWebView to set up the bug conditions. My feedback focuses on improving the maintainability and consistency of the new test code by using constants for identifiers and timeouts.
| - (void)testPlatformViewWebViewLinkTappableForContextMenuScenario { | ||
| XCUIElement *entranceButton = self.app.buttons[@"web view behind context menu test"]; | ||
| XCTAssertTrue([entranceButton waitForExistenceWithTimeout:kStandardTimeOut]); | ||
| [entranceButton tap]; | ||
|
|
||
| XCUIElement *platformView = self.app.webViews[@"platform_view[0]"]; | ||
| XCTAssertTrue([platformView waitForExistenceWithTimeout:kStandardTimeOut]); | ||
|
|
||
| // expand the context menu. | ||
| XCUIElement *showMenuButton = self.app.buttons[@"Show menu"]; | ||
| XCTAssertTrue([showMenuButton waitForExistenceWithTimeout:kStandardTimeOut]); | ||
| [showMenuButton tap]; | ||
|
|
||
| // tap to dismiss the context menu. | ||
| XCUIElement *menuItem = self.app.buttons[@"menu button 1"]; | ||
| XCTAssertTrue([menuItem waitForExistenceWithTimeout:kStandardTimeOut]); | ||
| XCUICoordinate *center = [self.app coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.5)]; | ||
| [center tap]; | ||
| XCTAssertTrue([menuItem waitForNonExistenceWithTimeout:kStandardTimeOut]); | ||
|
|
||
| // Verify that the web view link is still tappable. | ||
| XCUIElement *link = self.app.links[@"Target Link"]; | ||
| XCTAssertTrue([link waitForExistenceWithTimeout:kStandardTimeOut]); | ||
| [link tap]; | ||
| XCUIElement *successText = self.app.staticTexts[@"Navigation Successful"]; | ||
| XCTAssertTrue([successText waitForExistenceWithTimeout:60]); | ||
| } |
There was a problem hiding this comment.
To improve readability and maintainability, consider defining the string literals used for accessibility identifiers as static const variables. This avoids 'magic strings' and makes the test easier to read and update. Also, using the kStandardTimeOut constant for all timeouts ensures consistency.
- (void)testPlatformViewWebViewLinkTappableForContextMenuScenario {
static NSString *const kEntranceButtonIdentifier = @"web view behind context menu test";
static NSString *const kPlatformViewIdentifier = @"platform_view[0]";
static NSString *const kShowMenuButtonIdentifier = @"Show menu";
static NSString *const kMenuItemIdentifier = @"menu button 1";
static NSString *const kTargetLinkIdentifier = @"Target Link";
static NSString *const kSuccessTextIdentifier = @"Navigation Successful";
XCUIElement *entranceButton = self.app.buttons[kEntranceButtonIdentifier];
XCTAssertTrue([entranceButton waitForExistenceWithTimeout:kStandardTimeOut]);
[entranceButton tap];
XCUIElement *platformView = self.app.webViews[kPlatformViewIdentifier];
XCTAssertTrue([platformView waitForExistenceWithTimeout:kStandardTimeOut]);
// expand the context menu.
XCUIElement *showMenuButton = self.app.buttons[kShowMenuButtonIdentifier];
XCTAssertTrue([showMenuButton waitForExistenceWithTimeout:kStandardTimeOut]);
[showMenuButton tap];
// tap to dismiss the context menu.
XCUIElement *menuItem = self.app.buttons[kMenuItemIdentifier];
XCTAssertTrue([menuItem waitForExistenceWithTimeout:kStandardTimeOut]);
XCUICoordinate *center = [self.app coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.5)];
[center tap];
XCTAssertTrue([menuItem waitForNonExistenceWithTimeout:kStandardTimeOut]);
// Verify that the web view link is still tappable.
XCUIElement *link = self.app.links[kTargetLinkIdentifier];
XCTAssertTrue([link waitForExistenceWithTimeout:kStandardTimeOut]);
[link tap];
XCUIElement *successText = self.app.staticTexts[kSuccessTextIdentifier];
XCTAssertTrue([successText waitForExistenceWithTimeout:kStandardTimeOut]);
}References
- The repository style guide (line 47) requires following the Google Objective-C Style Guide. This guide recommends using
static constfor constants, which would improve the readability and maintainability of this test by replacing magic strings with named constants. (link)
There was a problem hiding this comment.
this makes it even harder to read.
|
@vashworth friendly reminder :) |
|
autosubmit label was removed for flutter/flutter/182111, because The base commit of the PR is older than 7 days and can not be merged. Please merge the latest changes from the main into this branch and resubmit the PR. |
… context menu bug
2aa278b to
3d3ee96
Compare
…ink behind context menu bug (flutter/flutter#182111)
…ink behind context menu bug (flutter/flutter#182111)
…ink behind context menu bug (flutter/flutter#182111)
…ink behind context menu bug (flutter/flutter#182111)
…11088) Manual roll Flutter from c023e5b2474f to 91b2d41a66d1 (31 revisions) Manual roll requested by [email protected] flutter/flutter@c023e5b...91b2d41 2026-02-19 [email protected] Reland #179643, only scroll hit-testable primary scroll views on status bar tap (flutter/flutter#182391) 2026-02-19 [email protected] Replace References to `flutter/engine` with `flutter/flutter` (flutter/flutter#182600) 2026-02-19 [email protected] Remove specific iOS extended attributes to fix code signing (flutter/flutter#180710) 2026-02-19 [email protected] Manual roll Skia from 7bbdc51ab0aa to ce5854495a3a (flutter/flutter#182637) 2026-02-19 [email protected] [pv]add integration test for original untappable web view link behind context menu bug (flutter/flutter#182111) 2026-02-19 [email protected] Roll pub packages (flutter/flutter#182579) 2026-02-19 [email protected] Remove Material import from scroll_view_test.dart (flutter/flutter#181281) 2026-02-19 [email protected] Add RawTooltip.ignorePointer (flutter/flutter#182527) 2026-02-19 [email protected] [web] Stop double loading fonts for WebParagraph (flutter/flutter#182026) 2026-02-19 [email protected] Migrate abi build paths to use new abi filtering api #AGP9 (flutter/flutter#181828) 2026-02-19 [email protected] [web] Flutter errors should be reported with console.error() (flutter/flutter#178886) 2026-02-19 [email protected] Manual roll Skia from dfe78d132e24 to 7bbdc51ab0aa (8 revisions) (flutter/flutter#182612) 2026-02-19 [email protected] Refactor autofill_group_test.dart to remove Material dependencies (flutter/flutter#181903) 2026-02-19 [email protected] Roll Packages from 59f905c to 9da22bf (8 revisions) (flutter/flutter#182611) 2026-02-19 [email protected] Roll Fuchsia Linux SDK from Ihau0pUz3u5ajw42u... to KfPgw04T0OEADLJA5... (flutter/flutter#182607) 2026-02-19 [email protected] Marks Mac_arm64_mokey entrypoint_dart_registrant unflaky (flutter/flutter#181648) 2026-02-19 [email protected] Remove material from Modal barrier tests (flutter/flutter#181708) 2026-02-19 [email protected] Remove material from ticker mode test (flutter/flutter#181696) 2026-02-19 [email protected] Remove material imports from Inherited Model, Magnifier, SafeArea, UndoHistory, Navigator and Layers test (flutter/flutter#181709) 2026-02-19 [email protected] docs: fix grammar in animation library documentation (flutter/flutter#182461) 2026-02-19 [email protected] Handle#6537 first grouped tests (flutter/flutter#182077) 2026-02-19 [email protected] Move SelectionArea web test from widgets to material folder (flutter/flutter#181951) 2026-02-19 [email protected] Roll Dart SDK from 44895e617182 to 2642761fca94 (6 revisions) (flutter/flutter#182572) 2026-02-19 [email protected] Update create template to always generate both SwiftPM and CocoaPods support for iOS/macOS plugins (flutter/flutter#181251) 2026-02-18 [email protected] Fix(Material): DateRangePicker ignores DatePickerTheme.dayShape (flutter/flutter#181658) 2026-02-18 [email protected] Fixing ExpansionTile expandedAlignment not Accepts AlignmentGeometry … (flutter/flutter#180814) 2026-02-18 [email protected] Give guided error message when CocoaPod and SwiftPM dependency conflicts (flutter/flutter#182392) 2026-02-18 [email protected] Remove material from interactive_viewer_test.dart (flutter/flutter#181465) 2026-02-18 [email protected] Bring Windows misc coverage out of bringup (flutter/flutter#182332) 2026-02-18 [email protected] Update android symbolication instructions (flutter/flutter#181267) 2026-02-18 [email protected] Unmark stable vulkan platform view tests as bringup (flutter/flutter#182554) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: ...
… context menu bug (flutter#182111) This PR adds an integration test that reproduces the bug in flutter#175099. I have verified that this test would fail if remove [the hacky workaround](flutter#179908). The next todo item would be to add test for admob banners in a scrollabe list. *List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.* Related to flutter#175099 And solve part of flutter#156753 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This PR adds an integration test that reproduces the bug in #175099.
I have verified that this test would fail if remove the hacky workaround.
The next todo item would be to add test for admob banners in a scrollabe list.
List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.
Related to #175099
And solve part of #156753
If you had to change anything in the flutter/tests repo, include a link to the migration guide as per the breaking change policy.
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the
gemini-code-assistbot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.