Page MenuHomePhabricator

GrowthExperiments: AddImage.cy.ts and AddALink.cy.ts fail in CI when GuidedTour is not installed
Closed, ResolvedPublic

Description

This failed on https://gerrit.wikimedia.org/r/c/mediawiki/extensions/CheckUser/+/1189888, https://gerrit.wikimedia.org/r/c/mediawiki/extensions/CheckUser/+/1190232, and https://gerrit.wikimedia.org/r/c/mediawiki/extensions/CheckUser/+/1190223:

12:29:35 ────────────────────────────────────────────────────────────────────────────────────────────────────
12:29:35                                                                                                     
12:29:35   Running:  AddALink.cy.ts                                                                  (1 of 7)
12:29:35 
12:29:35 (Cypress:8806): dconf-CRITICAL **: 11:29:35.041: unable to create directory '/run/user/2947/dconf': Permission denied.  dconf will not work properly.
12:29:35 
12:29:35 (Cypress:8806): dconf-CRITICAL **: 11:29:35.042: unable to create directory '/run/user/2947/dconf': Permission denied.  dconf will not work properly.
12:29:35 
12:29:35 (Cypress:8806): dconf-CRITICAL **: 11:29:35.042: unable to create directory '/run/user/2947/dconf': Permission denied.  dconf will not work properly.
12:29:40 
12:29:40 
12:29:40   Add a Link
12:30:15     1) link inspector can be used to accept/reject links and save an article.
12:30:15       cy:command ✔  task	MwApi:CreateUser, {usernameprefix: Alice}
12:30:15       cy:command ✔  visit	/index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page
12:30:15       cy:command ✔  window	
12:30:15       cy:command ✔  assert	expected **<window>** to have property **mw**
12:30:15       cy:command ✔  window	
12:30:15       cy:command ✔  its	.mw.Api
12:30:15       cy:command ✔  assert	expected **[Function]** to exist
12:30:15       cy:command ✔  window	
12:30:15           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:30:15                     Status: 200
12:30:15           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:30:15                     Status: 200
12:30:15       cy:command ✔  visit	/index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page
12:30:15       cy:command ✔  window	
12:30:15       cy:command ✔  its	.mw.Api
12:30:15       cy:command ✔  assert	expected **[Function]** to exist
12:30:15       cy:command ✔  window	
12:30:15           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:30:15                     Status: 200
12:30:15           cy:log ✱  Closing the guided tour homepage_discovery
12:30:15       cy:command ✘  get	.guider.mw-guidedtour-tour-homepage_discovery .guider_close button
12:30:15       cy:command ✘  assert	expected **.guider.mw-guidedtour-tour-homepage_discovery .guider_close button** to be **visible**
12:30:15                     Actual: 	".guider.mw-guidedtour-tour-homepage_discovery .guider_close button"
12:30:15                     Expected: 	"visible"
12:30:15 
12:30:15 
12:30:15 
12:30:15 
12:30:15   0 passing (35s)
12:30:15   1 failing
12:30:15 
12:30:15   1) Add a Link
12:30:15        link inspector can be used to accept/reject links and save an article.:
12:30:15      AssertionError: Timed out retrying after 20000ms: Expected to find element: `.guider.mw-guidedtour-tour-homepage_discovery .guider_close button`, but never found it.
12:30:15       at GuidedTour.close (webpack://GrowthExperiments/./cypress/pageObjects/GuidedTour.module.ts:5:58)
12:30:15       at Context.eval (webpack://GrowthExperiments/./cypress/e2e/AddALink.cy.ts:24:13)
12:30:15 
12:30:15 
12:30:15 
12:30:16 
12:30:16   (Results)
12:30:16 
12:30:16   ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
12:30:16   │ Tests:        1                                                                                │
12:30:16   │ Passing:      0                                                                                │
12:30:16   │ Failing:      1                                                                                │
12:30:16   │ Pending:      0                                                                                │
12:30:16   │ Skipped:      0                                                                                │
12:30:16   │ Screenshots:  1                                                                                │
12:30:16   │ Video:        true                                                                             │
12:30:16   │ Duration:     34 seconds                                                                       │
12:30:16   │ Spec Ran:     AddALink.cy.ts                                                                   │
12:30:16   └────────────────────────────────────────────────────────────────────────────────────────────────┘
12:30:16 
12:30:16 
12:30:16   (Screenshots)
12:30:16 
12:30:16   -  /workspace/log/GrowthExperiments/AddALink.cy.ts/Add a Link -- link inspector can     (1280x720)
12:30:16       be used to acceptreject links and save an article (failed).png                                
12:30:16 
12:30:16 
12:30:16   (Video)
12:30:16 
12:30:16   -  Video output: /workspace/log/GrowthExperiments/AddALink.cy.ts.mp4
12:30:16 
12:30:16 
12:30:16 ────────────────────────────────────────────────────────────────────────────────────────────────────
12:30:16                                                                                                     
12:30:16   Running:  AddImage.cy.ts                                                                  (2 of 7)
12:30:19 
12:30:19 
12:30:19   Add Image Structured Task
12:30:44     1) desktop: user can view image info and image details
12:30:44       cy:command ✔  task	MwApi:CreateUser, {usernameprefix: Alice}
12:30:44       cy:command ✔  visit	/index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page
12:30:44       cy:command ✔  window	
12:30:44       cy:command ✔  assert	expected **<window>** to have property **mw**
12:30:44       cy:command ✔  window	
12:30:44       cy:command ✔  its	.mw.Api
12:30:44       cy:command ✔  assert	expected **[Function]** to exist
12:30:44       cy:command ✔  window	
12:30:44           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:30:44                     Status: 200
12:30:44           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:30:44                     Status: 200
12:30:44       cy:command ✔  visit	/index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page
12:30:44       cy:command ✔  window	
12:30:44       cy:command ✔  its	.mw.Api
12:30:44       cy:command ✔  assert	expected **[Function]** to exist
12:30:44       cy:command ✔  window	
12:30:44           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:30:44                     Status: 200
12:30:44           cy:log ✱  Closing the guided tour homepage_discovery
12:30:44       cy:command ✘  get	.guider.mw-guidedtour-tour-homepage_discovery .guider_close button
12:30:44       cy:command ✘  assert	expected **.guider.mw-guidedtour-tour-homepage_discovery .guider_close button** to be **visible**
12:30:44                     Actual: 	".guider.mw-guidedtour-tour-homepage_discovery .guider_close button"
12:30:44                     Expected: 	"visible"
12:30:44 
12:30:44 
12:31:13     2) mobile: user can close the image suggestion UI
12:31:13       cy:command ✔  task	MwApi:CreateUser, {usernameprefix: Alice}
12:31:13       cy:command ✔  visit	/index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page
12:31:13       cy:command ✔  window	
12:31:13       cy:command ✔  assert	expected **<window>** to have property **mw**
12:31:13       cy:command ✔  window	
12:31:13       cy:command ✔  its	.mw.Api
12:31:13       cy:command ✔  assert	expected **[Function]** to exist
12:31:13       cy:command ✔  window	
12:31:13           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:31:13                     Status: 200
12:31:13           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:31:13                     Status: 200
12:31:13       cy:command ✔  visit	/index.php -> 301: http://127.0.0.1:9413/index.php?title=Main_Page
12:31:13       cy:command ✔  window	
12:31:13       cy:command ✔  its	.mw.Api
12:31:13       cy:command ✔  assert	expected **[Function]** to exist
12:31:13       cy:command ✔  window	
12:31:13           cy:xhr ➟  POST http://127.0.0.1:9413/api.php
12:31:13                     Status: 200
12:31:13       cy:command ✔  visit	index.php?title=Special:Homepage&mobileaction=toggle_view_mobile#/homepage/suggested-edits -> 301: http://127.0.0.1:9413/index.php?title=Special:Homepage
12:31:13       cy:command ✔  get	.se-card-title
12:31:13       cy:command ✔  assert	expected **<h3.se-card-title>** to have text **Ma'amoul**
12:31:13                     Actual: 	"Ma'amoul"
12:31:13                     Expected: 	"Ma'amoul"
12:31:13       cy:command ✔  get	a.se-card-content
12:31:13       cy:command ✔  assert	expected **<a.se-card-content>** not to have attribute **href** with the value **#**
12:31:13        cons:warn ❖  This page is using the deprecated ResourceLoader module "moment".
12:31:13                     [1.44] Use mediawiki.DateFormatter or native Intl function instead. See https://phabricator.wikimedia.org/T146798
12:31:13        cons:info ✱  You are running a development build of Vue.
12:31:13                     Make sure to use the production build (*.prod.js) when deploying for production.
12:31:13           cy:xhr ➟  POST http://127.0.0.1:9413/rest.php/growthexperiments/v0/user-impact/%2325?lang=en
12:31:13                     Status: 200
12:31:13       cy:command ✔  new url	http://127.0.0.1:9413/index.php?title=Special:Homepage#
12:31:13       cy:command ✔  new url	http://127.0.0.1:9413/index.php?title=Special:Homepage#/homepage/suggested-edits
12:31:13        cons:warn ❖  mediawiki.jqueryMsg: growthexperiments-homepage-mentorship-optout-text: Cannot read properties of null (reading 'mwJQueryMsgHasAlreadyBeenUsedAsAReplacement')
12:31:13        cons:warn ❖  mediawiki.jqueryMsg: growthexperiments-homepage-mentorship-about-subheader-mentor: Cannot read properties of null (reading 'mwJQueryMsgHasAlreadyBeenUsedAsAReplacement')
12:31:13        cons:warn ❖  mediawiki.jqueryMsg: growthexperiments-homepage-mentorship-about-mentor-par1: Cannot read properties of null (reading 'mwJQueryMsgHasAlreadyBeenUsedAsAReplacement')
12:31:13        cons:warn ❖  mediawiki.jqueryMsg: growthexperiments-homepage-mentorship-about-mentor-par2: Cannot read properties of null (reading 'mwJQueryMsgHasAlreadyBeenUsedAsAReplacement')
12:31:13        cons:warn ❖  mediawiki.jqueryMsg: growthexperiments-homepage-mentorship-optout-text: Cannot read properties of null (reading 'mwJQueryMsgHasAlreadyBeenUsedAsAReplacement')
12:31:13           cy:xhr ❖  GET http://127.0.0.1:9413/api/rest_v1/page/summary/Ma'amoul
12:31:13                     Status: 404
12:31:13           cy:xhr ❖  GET https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/127.0.0.1/all-access/user/Ma'amoul/daily/20250722/20250920
12:31:13                     Status: 404
12:31:13       cy:command ✔  get	a.se-card-content
12:31:13       cy:command ✘  click	
12:31:13           cy:xhr ❖  GET http://127.0.0.1:9413/api/rest_v1/page/summary/Ma'amoul
12:31:13                     Status: 404
12:31:13           cy:xhr ❖  GET https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/127.0.0.1/all-access/user/Ma'amoul/daily/20250722/20250920
12:31:13                     Status: 404
12:31:13 
12:31:13 
12:31:13 
12:31:13 
12:31:13   0 passing (54s)
12:31:13   2 failing
12:31:13 
12:31:13   1) Add Image Structured Task
12:31:13        desktop: user can view image info and image details:
12:31:13      AssertionError: Timed out retrying after 20000ms: Expected to find element: `.guider.mw-guidedtour-tour-homepage_discovery .guider_close button`, but never found it.
12:31:13       at GuidedTour.close (webpack://GrowthExperiments/./cypress/pageObjects/GuidedTour.module.ts:5:58)
12:31:13       at Context.eval (webpack://GrowthExperiments/./cypress/e2e/AddImage.cy.ts:22:13)
12:31:13 
12:31:13   2) Add Image Structured Task
12:31:13        mobile: user can close the image suggestion UI:
12:31:13      CypressError: Timed out retrying after 20050ms: `cy.click()` failed because this element:
12:31:13 
12:31:13 `<a href="http://127.0.0.1:9413/index.php?title=Special%3AHomepage%2Fnewcomertask%2F23&amp;geclickid=i55igfn3g8vmj7ar80nrla7hr2tuj40l&amp;genewcomertasktoken=ho4omsb87olc1tt05i73n7a0dunl3psu&amp;gesuggestededit=1&amp;getasktype=image-recommendation" class="se-card-content">...</a>`
12:31:13 
12:31:13 is being covered by another element:
12:31:13 
12:31:13 `<div class="drawer-container__mask drawer-container__mask--visible"></div>`
12:31:13 
12:31:13 Fix this problem, or use {force: true} to disable error checking.
12:31:13 
12:31:13 https://on.cypress.io/element-cannot-be-interacted-with
12:31:13       at ensureIsDescendent (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:114504:68)
12:31:13       at ensureDescendents (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:114555:5)
12:31:13       at ensureDescendentsAndScroll (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:114561:14)
12:31:13       at ensureElIsNotCovered (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:114692:5)
12:31:13       at runAllChecks (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:114891:52)
12:31:13       at retryActionability (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:114928:16)
12:31:13       at tryCatcher (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:1777:23)
12:31:13       at Promise.attempt.Promise.try (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:4285:29)
12:31:13       at whenStable (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:147344:68)
12:31:13       at <unknown> (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:147285:14)
12:31:13       at tryCatcher (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:1777:23)
12:31:13       at Promise._settlePromiseFromHandler (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:1489:31)
12:31:13       at Promise._settlePromise (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:1546:18)
12:31:13       at Promise._settlePromise0 (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:1591:10)
12:31:13       at Promise._settlePromises (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:1671:18)
12:31:13       at Promise._fulfill (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:1615:18)
12:31:13       at <unknown> (http://127.0.0.1:9413/__cypress/runner/cypress_runner.js:5420:46)
12:31:13 
12:31:13 
12:31:13 
12:31:14 
12:31:14   (Results)
12:31:14 
12:31:14   ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
12:31:14   │ Tests:        2                                                                                │
12:31:14   │ Passing:      0                                                                                │
12:31:14   │ Failing:      2                                                                                │
12:31:14   │ Pending:      0                                                                                │
12:31:14   │ Skipped:      0                                                                                │
12:31:14   │ Screenshots:  2                                                                                │
12:31:14   │ Video:        true                                                                             │
12:31:14   │ Duration:     54 seconds                                                                       │
12:31:14   │ Spec Ran:     AddImage.cy.ts                                                                   │
12:31:14   └────────────────────────────────────────────────────────────────────────────────────────────────┘
12:31:14 
12:31:14 
12:31:14   (Screenshots)
12:31:14 
12:31:14   -  /workspace/log/GrowthExperiments/AddImage.cy.ts/Add Image Structured Task -- des     (1280x720)
12:31:14      ktop user can view image info and image details (failed).png                                   
12:31:14   -  /workspace/log/GrowthExperiments/AddImage.cy.ts/Add Image Structured Task -- mob     (1280x720)
12:31:14      ile user can close the image suggestion UI (failed).png

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

I think this is fallout from rCICFaa4cde27ef23: Zuul: [mediawiki/extensions/CheckUser] Remove dependency on GuidedTour and T264359: Remove GuidedTour from Special:Investigate

13:31:08 AssertionError: Timed out retrying after 20000ms: Expected to find element: .guider.mw-guidedtour-tour-homepage_discovery .guider_close button, but never found it.

Dreamy_Jazz triaged this task as Unbreak Now! priority.EditedSep 22 2025, 12:14 PM

Given the above, this isn't flaky but is actually blocking. Marking as UBN. Also appears to affect Wikibase (3rd party installations)

Dreamy_Jazz renamed this task from GrowthExperiments: AddImage.cy.ts and AddALink.cy.ts are flaky to GrowthExperiments: AddImage.cy.ts and AddALink.cy.ts fail in CI when GuidedTour is not installed.Sep 22 2025, 12:14 PM

Change #1190263 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[integration/config@master] zuul: GrowthExperiments depends on GuidedTour

https://gerrit.wikimedia.org/r/1190263

Change #1190263 merged by jenkins-bot:

[integration/config@master] Zuul: [mediawiki/extensions/GrowthExperiments] Add dependency on GuidedTour

https://gerrit.wikimedia.org/r/1190263

Mentioned in SAL (#wikimedia-releng) [2025-09-22T12:40:26Z] <James_F> Zuul: [mediawiki/extensions/GrowthExperiments] Add dependency on GuidedTour, for T405220

Provisionally resolved?