Summary
The ReviseTone.cy.ts test flakily fails to find the ve-ui-editCheck-gutter-action-warning element
Technical details
Example at https://integration.wikimedia.org/ci/job/quibble-with-gated-extensions-selenium-php83/24532/console#console-section-4 (kept forever):
09:58:51 Revise Tone 09:58:54 On desktop 09:59:01 ✓ Shows the Revise Tone Edit Check (9862ms) 09:59:01 - Closes the Editor when declining Edits and suggests a new task 09:59:01 - Shows the Revise Tone Edit Check and tags edits 09:59:01 On mobile 09:59:30 1) Shows the Revise Tone Edit Check 09:59:30 cy:command ✔ visit /index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page 09:59:30 cy:command ✔ window 09:59:30 cy:command ✔ assert expected **<window>** to have property **mw** 09:59:30 cy:command ✔ window 09:59:30 cy:command ✔ its .mw.Api 09:59:30 cy:command ✔ assert expected **[Function]** to exist 09:59:30 cy:command ✔ window 09:59:30 cy:xhr ➟ POST http://127.0.0.1:9413/api.php 09:59:30 Status: 200 09:59:30 cons:warn ❖ movePinnableElement: destination container not found , 09:59:30 vector-toc-unpinned-container 09:59:30 cy:xhr ➟ POST http://127.0.0.1:9413/api.php 09:59:30 Status: 200 09:59:30 cy:command ✔ visit /index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page 09:59:30 cy:command ✔ window 09:59:30 cy:command ✔ its .mw.Api 09:59:30 cy:command ✔ assert expected **[Function]** to exist 09:59:30 cy:command ✔ window 09:59:30 cons:warn ❖ movePinnableElement: destination container not found , 09:59:30 vector-toc-unpinned-container 09:59:30 cy:xhr ➟ POST http://127.0.0.1:9413/api.php 09:59:30 Status: 200 09:59:30 cy:command ✔ viewport 360, 780 09:59:30 cy:command ✔ visit index.php?title=Special:Homepage/suggested-edits&mobileaction=toggle_view_mobile&mpo=growthexperiments-revise-tone:treatment -> 301: http://127.0.0.1:9413/index.php?title=Special:Homepage/suggested-edits&mpo=growthexperiments-revise-tone%3Atreatment 09:59:30 cy:command ✔ get .se-card-title 09:59:30 cy:command ✔ assert expected **<h3.se-card-title>** to have text **Kristallsee** 09:59:30 Actual: "Kristallsee" 09:59:30 Expected: "Kristallsee" 09:59:30 cy:command ✔ get a.se-card-content 09:59:30 cy:command ✔ assert expected **<a.se-card-content>** not to have attribute **href** with the value **#** 09:59:30 cy:command ✔ get .suggested-edits-next .oo-ui-buttonElement-button 09:59:30 cy:command ✔ click 09:59:30 cy:xhr ❖ GET http://127.0.0.1:9413/api/rest_v1/page/summary/Kristallsee 09:59:30 Status: 404 09:59:30 cy:xhr ❖ GET https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/127.0.0.1/all-access/user/Kristallsee/daily/20260204/20260405 09:59:30 Status: 404 09:59:30 cons:warn ❖ This page is using the deprecated ResourceLoader module "moment". 09:59:30 [1.44] Use mediawiki.DateFormatter or native Intl function instead. See https://phabricator.wikimedia.org/T146798 09:59:30 cy:xhr ❖ GET http://127.0.0.1:9413/api/rest_v1/page/summary/Ma'amoul 09:59:30 Status: 404 09:59:30 cy:xhr ❖ GET https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/127.0.0.1/all-access/user/Ma'amoul/daily/20260204/20260405 09:59:30 Status: 404 09:59:30 cy:xhr ❖ GET http://127.0.0.1:9413/api/rest_v1/page/summary/Eldfjall 09:59:30 Status: 404 09:59:30 cy:xhr ❖ GET https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/127.0.0.1/all-access/user/Eldfjall/daily/20260204/20260405 09:59:30 Status: 404 09:59:30 cy:command ✔ get .se-card-title 09:59:30 cy:command ✔ assert expected **<h3.se-card-title>** to have text **Eldfjall** 09:59:30 Actual: "Eldfjall" 09:59:30 Expected: "Eldfjall" 09:59:30 cy:command ✔ get a.se-card-content 09:59:30 cy:command ✔ assert expected **<a.se-card-content>** not to have attribute **href** with the value **#** 09:59:30 cy:command ✔ get a.se-card-content 09:59:30 cy:command ✔ click 09:59:30 cy:command ✔ page load --page loaded-- 09:59:30 cy:command ✔ new url http://127.0.0.1:9413/index.php?title=Eldfjall&getasktype=revise-tone&gesuggestededit=1&geclickid=qugd8ldm5i8rodkobe35r54ar6ipgk2a&genewcomertasktoken=jmnp0gblgrghe2vhni2hb2ehn20upf2p&mpo=growthexperiments-revise-tone%3Atreatment&veaction=edit§ion=all 09:59:30 cy:command ✔ get .ext-growthExperiments-ReviseToneOnboarding 09:59:30 cy:command ✔ assert expected **<div.cdx-dialog.ext-growthExperiments-OnboardingDialog.ext-growthExperiments-ReviseToneOnboarding>** to be **visible** 09:59:30 cy:command ✔ new url http://127.0.0.1:9413/index.php?title=Eldfjall&getasktype=revise-tone&gesuggestededit=1&genewcomertasktoken=jmnp0gblgrghe2vhni2hb2ehn20upf2p&mpo=growthexperiments-revise-tone%3Atreatment&veaction=edit§ion=all 09:59:30 cy:command ✔ new url http://127.0.0.1:9413/index.php?title=Eldfjall&gesuggestededit=1&genewcomertasktoken=jmnp0gblgrghe2vhni2hb2ehn20upf2p&mpo=growthexperiments-revise-tone%3Atreatment&veaction=edit§ion=all 09:59:30 cy:command ✔ new url http://127.0.0.1:9413/index.php?title=Eldfjall&gesuggestededit=1&mpo=growthexperiments-revise-tone%3Atreatment&veaction=edit§ion=all 09:59:30 cy:xhr ➟ POST http://127.0.0.1:9413/api.php 09:59:30 Status: 200 09:59:30 cons:info ✱ You are running a development build of Vue. 09:59:30 Make sure to use the production build (*.prod.js) when deploying for production. 09:59:30 cy:command ✔ new url http://127.0.0.1:9413/index.php?title=Eldfjall&gesuggestededit=1&mpo=growthexperiments-revise-tone%3Atreatment 09:59:30 cy:command ✔ new url http://127.0.0.1:9413/index.php?title=Eldfjall&gesuggestededit=1&mpo=growthexperiments-revise-tone%3Atreatment#/editor/all 09:59:30 cons:warn ❖ Failed to log experiment interaction because mw.testKitchen is not defined 09:59:30 cons:warn ❖ This page is using the deprecated ResourceLoader module "moment". 09:59:30 [1.44] Use mediawiki.DateFormatter or native Intl function instead. See https://phabricator.wikimedia.org/T146798 09:59:30 cy:xhr ➟ GET http://127.0.0.1:9413/api.php?action=visualeditor&format=json&paction=parse&page=Eldfjall&uselang=en&editintro=&preload=&preloadparams=&formatversion=2 09:59:30 Status: 200 09:59:30 cy:command ✔ get .close-all-button button 09:59:30 cy:command ✔ assert expected **<button.cdx-button.cdx-button--action-default.cdx-button--weight-quiet.cdx-button--size-medium.ext-growthExperiments-OnboardingDialog__header__top__button>** to be **visible** 09:59:30 cy:command ✔ click 09:59:30 cy:xhr ➟ POST http://127.0.0.1:9413/api.php 09:59:30 Status: 200 09:59:30 cy:command ✔ get .ve-ui-editCheckActionWidget 09:59:30 cy:command ✔ assert expected **<div.oo-ui-widget.oo-ui-labelElement.oo-ui-flaggedElement-warning.oo-ui-iconElement.oo-ui-messageWidget-block.oo-ui-messageWidget.ve-ui-editCheckActionWidget>** to be **visible** 09:59:30 cons:warn ❖ Failed to log experiment interaction because mw.testKitchen is not defined 09:59:30 cy:xhr ➟ POST http://127.0.0.1:9413/api.php 09:59:30 Status: 200 09:59:30 cy:command ✔ wait 1000 09:59:30 cy:command ✔ get .ve-ui-editCheckActionWidget 09:59:30 cy:command ✔ assert expected **<div.oo-ui-widget.oo-ui-labelElement.oo-ui-flaggedElement-warning.oo-ui-iconElement.oo-ui-messageWidget-block.oo-ui-messageWidget.ve-ui-editCheckActionWidget>** to be **visible** 09:59:30 cy:command ✔ get .ve-ui-editCheckActionWidget 09:59:30 cy:command ✔ assert expected **<div.oo-ui-widget.oo-ui-labelElement.oo-ui-flaggedElement-warning.oo-ui-iconElement.oo-ui-messageWidget-block.oo-ui-messageWidget.ve-ui-editCheckActionWidget>** to have a length of **1** 09:59:30 Actual: 1 09:59:30 Expected: 1 09:59:30 cy:command ✔ get .ve-ui-editCheck-gutter-action-warning .oo-ui-image-warning 09:59:30 cy:command ✘ assert expected **<span.oo-ui-widget.oo-ui-widget-enabled.oo-ui-iconElement-icon.oo-ui-labelElement-invisible.oo-ui-iconWidget.oo-ui-iconElement.oo-ui-icon-alert.oo-ui-flaggedElement-warning.oo-ui-image-warning>** to be **visible** 09:59:30 09:59:30 09:59:30 - Closes the Editor when declining Edits and suggests a new task 09:59:30 - Shows the Revise Tone Edit Check and tags edits 09:59:30 09:59:30 09:59:30 1 passing (39s) 09:59:30 4 pending 09:59:30 1 failing 09:59:30 09:59:30 1) Revise Tone 09:59:30 On mobile 09:59:30 Shows the Revise Tone Edit Check: 09:59:30 AssertionError: Timed out retrying after 20000ms: expected '<span.oo-ui-widget.oo-ui-widget-enabled.oo-ui-iconElement-icon.oo-ui-labelElement-invisible.oo-ui-iconWidget.oo-ui-iconElement.oo-ui-icon-alert.oo-ui-flaggedElement-warning.oo-ui-image-warning>' to be 'visible' 09:59:30 09:59:30 This element `<span.oo-ui-widget.oo-ui-widget-enabled.oo-ui-iconElement-icon.oo-ui-labelElement-invisible.oo-ui-iconWidget.oo-ui-iconElement.oo-ui-icon-alert.oo-ui-flaggedElement-warning.oo-ui-image-warning>` is not visible because its parent `<div.oo-ui-window-content.oo-ui-dialog-content.ve-ui-sidebarDialog-content.oo-ui-window-content-setup.oo-ui-window-content-ready>` has CSS property: `overflow: hidden` and an effective width and height of: `44 x 0` pixels. 09:59:30 at Context.eval (webpack://GrowthExperiments/./cypress/e2e/ReviseTone.cy.ts:126:75)
- The relevant part starts at 0:18
- The check is visible - why does it not find it? Or is this about the ⚠️-icon in the gutter being partially obscured by the help-panel button?
Acceptance criteria
- The test no longer flakily fails on this check