Skip to content

[pv]add integration test for original untappable web view link behind context menu bug#182111

Merged
auto-submit[bot] merged 1 commit intoflutter:masterfrom
hellohuanlin:pv_integration_test_web_view_behind_context_menu
Feb 19, 2026
Merged

[pv]add integration test for original untappable web view link behind context menu bug#182111
auto-submit[bot] merged 1 commit intoflutter:masterfrom
hellohuanlin:pv_integration_test_web_view_behind_context_menu

Conversation

@hellohuanlin
Copy link
Contributor

@hellohuanlin hellohuanlin commented Feb 9, 2026

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-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.

@hellohuanlin hellohuanlin force-pushed the pv_integration_test_web_view_behind_context_menu branch from c01d14e to 2aa278b Compare February 9, 2026 22:28
@hellohuanlin hellohuanlin marked this pull request as ready for review February 9, 2026 22:34
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +98 to +124
- (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]);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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
  1. The repository style guide (line 47) requires following the Google Objective-C Style Guide. This guide recommends using static const for constants, which would improve the readability and maintainability of this test by replacing magic strings with named constants. (link)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes it even harder to read.

@hellohuanlin
Copy link
Contributor Author

@vashworth friendly reminder :)

Copy link
Contributor

@vashworth vashworth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great!

@hellohuanlin hellohuanlin added the autosubmit Merge PR when tree becomes green via auto submit App label Feb 19, 2026
@auto-submit
Copy link
Contributor

auto-submit bot commented Feb 19, 2026

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.

@auto-submit auto-submit bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Feb 19, 2026
@hellohuanlin hellohuanlin force-pushed the pv_integration_test_web_view_behind_context_menu branch from 2aa278b to 3d3ee96 Compare February 19, 2026 18:50
@hellohuanlin hellohuanlin added the autosubmit Merge PR when tree becomes green via auto submit App label Feb 19, 2026
@auto-submit auto-submit bot added this pull request to the merge queue Feb 19, 2026
Merged via the queue into flutter:master with commit 8034db0 Feb 19, 2026
151 of 152 checks passed
@flutter-dashboard flutter-dashboard bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Feb 19, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 20, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 20, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 20, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 20, 2026
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Feb 20, 2026
…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:
...
ahmedsameha1 pushed a commit to ahmedsameha1/flutter that referenced this pull request Feb 27, 2026
… 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants