Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ _Released 10/20/2025 (PENDING)_
- Fixed an issue where grouped command text jumps up and down when expanding and collapsing in the command log. Addressed in [#32757](https://github.com/cypress-io/cypress/pull/32757).
- Fixed an issue where command snapshots were not correctly displayed in Studio. Addressed in [#32808](https://github.com/cypress-io/cypress/pull/32808).
- Fixed an issue with grouped console prop items having a hard to read blue color in the console log and duplicate `:` characters being displayed. Addressed in [#32776](https://github.com/cypress-io/cypress/pull/32776).
- Fixed an issue where `cy.wait('@alias')` could time out when the underlying network request was canceled by navigation (e.g., `cy.visit`, `cy.reload`). Fixes [#19326](https://github.com/cypress-io/cypress/issues/19326).

**Misc:**

Expand Down
22 changes: 22 additions & 0 deletions packages/driver/cypress/e2e/commands/navigation.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -1884,6 +1884,28 @@ describe('src/cy/commands/navigation', () => {
})
})
})

it('should resolve wait for a request canceled by navigation', () => {
const alias = crypto.randomUUID()

cy.intercept(/jsonplaceholder.cypress.io/).as(alias)

cy.visit('https://example.cypress.io/commands/network-requests')
cy.get('.network-btn').click()

cy.visit('https://example.cypress.io/commands/network-requests')
cy.wait(`@${alias}`).then((interception) => {
const actual = JSON.parse(
JSON.stringify(interception, (_, value) => value),
)

cy.wrap(actual).should('deep.equal', {
...actual,
state: 'Errored',
error: { ...interception.error },
})
})
})
})

// TODO(webkit): fix+unskip for webkit release
Expand Down
31 changes: 31 additions & 0 deletions packages/driver/src/cy/commands/navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,18 @@ const pageLoading = (bool, Cypress, state) => {
Cypress.action('app:page:loading', bool)
}

const markRequestAsCancelled = (request: any) => {
if (
request &&
request.state === 'Received' &&
!request.response &&
!request.error
) {
request.state = 'Errored'
request.error = new Error('Request was cancelled due to navigation.')
}
}

const stabilityChanged = async (Cypress, state, config, stable) => {
debug('stabilityChanged:', stable)

Expand All @@ -187,6 +199,25 @@ const stabilityChanged = async (Cypress, state, config, stable) => {
return
}

// Mark inflight requests as canceled at navigation start.
try {
const routes = state('routes') ?? {}

_.forEach(routes, ({ requests }) => {
_.forEach(requests, markRequestAsCancelled)
})

const aliasedRequests = state('aliasedRequests') ?? []

aliasedRequests.forEach(({ request }) => {
markRequestAsCancelled(request)
})
} catch (_) {
// TODO: Should I use `$errUtils.logError` or another method from
Copy link
Contributor

Choose a reason for hiding this comment

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

My opinion @adamalston would be to do nothing since an error in the Cypress log would likely confuse the user. @jennifer-shehane anything you want to add here?

// `$errUtils` here? Alternatively, should I do nothing, since canceled
// requests aren't necessarily a problem in Cypress?
}

// if we purposefully just caused the page to load
// (and thus instability) don't log this out
if (knownCommandCausedInstability) {
Expand Down
1 change: 1 addition & 0 deletions packages/electron/src/print-node-version.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
// eslint-disable-next-line no-console
console.log(process.version.replace('v', ''))
process.exit(0)