Skip to content

fix(core): add fallback handler for hardware back button when no router is present #17816

fix(core): add fallback handler for hardware back button when no router is present

fix(core): add fallback handler for hardware back button when no router is present #17816

Triggered via pull request December 17, 2025 15:15
Status Success
Total duration 13m 17s
Artifacts 27

build.yml

on: pull_request
build-react
56s
build-react
build-vue
50s
build-vue
Matrix: test-core-screenshot
build-angular
1m 11s
build-angular
build-angular-server
45s
build-angular-server
test-core-clean-build
13s
test-core-clean-build
test-core-lint
58s
test-core-lint
test-core-spec
50s
test-core-spec
build-react-router
50s
build-react-router
build-vue-router
57s
build-vue-router
verify-screenshots
2s
verify-screenshots
Matrix: test-angular-e2e
Matrix: test-react-e2e
Matrix: test-react-router-e2e
Matrix: test-vue-e2e
verify-test-angular-e2e
3s
verify-test-angular-e2e
verify-test-react-e2e
3s
verify-test-react-e2e
verify-test-react-router-e2e
4s
verify-test-react-router-e2e
verify-test-vue-e2e
3s
verify-test-vue-e2e
Fit to window
Zoom out
Zoom in

Annotations

6 errors and 20 notices
[Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:130:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › using arrow keys should move between enabled radios within group: src/components/radio/test/a11y/radio.e2e.ts#L134
3) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:130:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › using arrow keys should move between enabled radios within group Error: expect(locator).toBeFocused() failed Locator: locator('#first-group ion-radio').first() Expected: focused Received: inactive Timeout: 5000ms Call log: - Expect "toBeFocused" with timeout 5000ms - waiting for locator('#first-group ion-radio').first() 9 × locator resolved to <ion-radio value="huey" role="radio" tabindex="0" aria-checked="true" class="md in-item radio-checked radio-label-placement-start hydrated">Huey</ion-radio> - unexpected value "inactive" 132 | 133 | await pageUtils.pressKeys('Tab'); > 134 | await expect(firstGroupRadios.nth(0)).toBeFocused(); | ^ 135 | 136 | await page.keyboard.press('ArrowDown'); 137 | await expect(firstGroupRadios.nth(1)).toBeFocused(); at /ionic/src/components/radio/test/a11y/radio.e2e.ts:134:47
[Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups: src/components/radio/test/a11y/radio.e2e.ts#L122
2) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeFocused() failed Locator: locator('#first-group ion-radio').first() Expected: focused Received: inactive Timeout: 5000ms Call log: - Expect "toBeFocused" with timeout 5000ms - waiting for locator('#first-group ion-radio').first() 9 × locator resolved to <ion-radio value="huey" role="radio" tabindex="0" aria-checked="true" class="md in-item radio-checked radio-label-placement-start hydrated">Huey</ion-radio> - unexpected value "inactive" 120 | 121 | await pageUtils.pressKeys('Tab'); > 122 | await expect(firstGroupRadios.nth(0)).toBeFocused(); | ^ 123 | 124 | await pageUtils.pressKeys('Tab'); 125 | await expect(secondGroupRadios.nth(0)).toBeFocused(); at /ionic/src/components/radio/test/a11y/radio.e2e.ts:122:47
[Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups: src/components/radio/test/a11y/radio.e2e.ts#L122
2) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups Error: expect(locator).toBeFocused() failed Locator: locator('#first-group ion-radio').first() Expected: focused Received: inactive Timeout: 5000ms Call log: - Expect "toBeFocused" with timeout 5000ms - waiting for locator('#first-group ion-radio').first() 9 × locator resolved to <ion-radio value="huey" role="radio" tabindex="0" aria-checked="true" class="md in-item radio-checked radio-label-placement-start hydrated">Huey</ion-radio> - unexpected value "inactive" 120 | 121 | await pageUtils.pressKeys('Tab'); > 122 | await expect(firstGroupRadios.nth(0)).toBeFocused(); | ^ 123 | 124 | await pageUtils.pressKeys('Tab'); 125 | await expect(secondGroupRadios.nth(0)).toBeFocused(); at /ionic/src/components/radio/test/a11y/radio.e2e.ts:122:47
[Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:130:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › using arrow keys should move between enabled radios within group: src/components/radio/test/a11y/radio.e2e.ts#L134
1) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:130:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › using arrow keys should move between enabled radios within group Error: expect(locator).toBeFocused() failed Locator: locator('#first-group ion-radio').first() Expected: focused Received: inactive Timeout: 5000ms Call log: - Expect "toBeFocused" with timeout 5000ms - waiting for locator('#first-group ion-radio').first() 9 × locator resolved to <ion-radio value="huey" role="radio" tabindex="0" aria-checked="true" class="md in-item radio-checked radio-label-placement-start hydrated">Huey</ion-radio> - unexpected value "inactive" 132 | 133 | await pageUtils.pressKeys('Tab'); > 134 | await expect(firstGroupRadios.nth(0)).toBeFocused(); | ^ 135 | 136 | await page.keyboard.press('ArrowDown'); 137 | await expect(firstGroupRadios.nth(1)).toBeFocused(); at /ionic/src/components/radio/test/a11y/radio.e2e.ts:134:47
[Mobile Firefox] › src/components/toast/test/swipe-gesture/toast.e2e.ts:25:9 › toast: swipe gesture with top position - ios/ltr › should swipe up to dismiss with anchor: src/components/toast/test/swipe-gesture/toast.e2e.ts#L0
2) [Mobile Firefox] › src/components/toast/test/swipe-gesture/toast.e2e.ts:25:9 › toast: swipe gesture with top position - ios/ltr › should swipe up to dismiss with anchor Test timeout of 30000ms exceeded.
[Mobile Firefox] › src/components/tab-bar/test/basic/tab-bar.e2e.ts:9:9 › tab-bar: basic - ionic/md/ltr/light › should not have visual regressions: src/components/tab-bar/test/basic/tab-bar.e2e.ts#L45
1) [Mobile Firefox] › src/components/tab-bar/test/basic/tab-bar.e2e.ts:9:9 › tab-bar: basic - ionic/md/ltr/light › should not have visual regressions Error: expect(locator).toHaveScreenshot(expected) failed Locator: locator('ion-tab-bar') 533 pixels (ratio 0.03 of all image pixels) are different. Snapshot: tab-bar-default-ionic-md-ltr-light.png Call log: - Expect "toHaveScreenshot(tab-bar-default-ionic-md-ltr-light.png)" with timeout 5000ms - verifying given screenshot expectation - waiting for locator('ion-tab-bar') - locator resolved to <ion-tab-bar role="tablist" selected-tab="2" class="ionic tab-bar-full tab-bar-round hydrated">…</ion-tab-bar> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - 533 pixels (ratio 0.03 of all image pixels) are different. - waiting 100ms before taking screenshot - waiting for locator('ion-tab-bar') - locator resolved to <ion-tab-bar role="tablist" selected-tab="2" class="ionic tab-bar-full tab-bar-round hydrated">…</ion-tab-bar> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - captured a stable screenshot - 533 pixels (ratio 0.03 of all image pixels) are different. 43 | const tabBar = page.locator('ion-tab-bar'); 44 | > 45 | await expect(tabBar).toHaveScreenshot(screenshot(`tab-bar-default`)); | ^ 46 | }); 47 | }); 48 | }); at /ionic/src/components/tab-bar/test/basic/tab-bar.e2e.ts:45:28
🎭 Playwright Run Summary
360 skipped 273 passed (2.2m)
🎭 Playwright Run Summary
368 skipped 308 passed (3.4m)
🎭 Playwright Run Summary
2 skipped 667 passed (3.6m)
🎭 Playwright Run Summary
1 skipped 676 passed (3.9m)
🎭 Playwright Run Summary
8 skipped 688 passed (3.9m)
🎭 Playwright Run Summary
8 skipped 663 passed (4.4m)
🎭 Playwright Run Summary
3 flaky [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:130:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › using arrow keys should move between enabled radios within group [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:130:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › using arrow keys should move between enabled radios within group 4 skipped 676 passed (5.2m)
🎭 Playwright Run Summary
36 skipped 824 passed (5.6m)
🎭 Playwright Run Summary
14 skipped 491 passed (6.2m)
🎭 Playwright Run Summary
5 skipped 681 passed (6.8m)
🎭 Playwright Run Summary
10 skipped 648 passed (6.7m)
🎭 Playwright Run Summary
3 skipped 664 passed (7.9m)
🎭 Playwright Run Summary
1 skipped 656 passed (8.4m)
🎭 Playwright Run Summary
12 skipped 685 passed (8.4m)
🎭 Playwright Run Summary
13 skipped 659 passed (8.6m)
🎭 Playwright Run Summary
5 skipped 668 passed (8.8m)
🎭 Playwright Run Summary
2 flaky [Mobile Firefox] › src/components/tab-bar/test/basic/tab-bar.e2e.ts:9:9 › tab-bar: basic - ionic/md/ltr/light › should not have visual regressions [Mobile Firefox] › src/components/toast/test/swipe-gesture/toast.e2e.ts:25:9 › toast: swipe gesture with top position - ios/ltr › should swipe up to dismiss with anchor 5 skipped 718 passed (9.2m)
🎭 Playwright Run Summary
18 skipped 617 passed (9.4m)
🎭 Playwright Run Summary
4 skipped 738 passed (9.6m)
🎭 Playwright Run Summary
14 skipped 682 passed (10.1m)

Artifacts

Produced during runtime
Name Size Digest
ionic-angular
805 KB
sha256:7ddb92d44ab839f34a75e9830eb52243b5748aae8a7dc239a992c817319720fa
ionic-angular-server
8.55 KB
sha256:05f5140b3227501c6f095eeb5e666d6f20204c1f33470910976441e93b045018
ionic-core
5.15 MB
sha256:2f99167b10d877c9b4322b6fe40b2554bb04c7f40d6dc14a0a977a91a55873fc
ionic-react
343 KB
sha256:18f1c103e80c97d6f50c09fab3c25ed42335b926e063e5e1cac0fa42cf1d39de
ionic-react-router
27.9 KB
sha256:401d9d296b2313ba7e15444f0f2bf144657c3cd3ec05ca134f6d0dbe93418eaf
ionic-vue
373 KB
sha256:5e5682c470977660ca74b615d6458fceaff7f13dd1b0326a9f1a6c0767ffffe4
ionic-vue-router
17.1 KB
sha256:0b596c971b6b18541ca521e854b1e2f28fd4f56921a534b3863ff99af1627da0
test-results-1-20
515 KB
sha256:cc9a96d559b9f1c6a2eb2ed557ad49d03657737bf77ec7735e9f37a9d71d3d68
test-results-10-20
459 KB
sha256:9d1690896f76059e786fadd5a4a476619603e2d50a6cd89f4ce3cf4dc7a4d413
test-results-11-20
2.45 MB
sha256:23de58fd1dca12f63c3aa36f95cba810878553e65403bcbe0315b572ae135411
test-results-12-20
499 KB
sha256:54894cf2564e0c442a93f28b1036a2d52b8c7fe8e5aa9168ae7cf16e94dd40a5
test-results-13-20
520 KB
sha256:34b9c359fd38cb1117cf1208c859e6cee0bef501502b0727d616a3a61795b686
test-results-14-20
443 KB
sha256:0ed1edf94e6b63562255998be7de15580037e460558a8fad21ee62c1c915ea05
test-results-15-20
478 KB
sha256:b08ae2bf4c7bed855e700bd921d44b9cc84b8def3b54e58445253e0a965082d6
test-results-16-20
493 KB
sha256:1c85b3003a6346d9787650ef3c05de298af43edcabfcd96357019d2bd6988c1b
test-results-17-20
576 KB
sha256:0b361241737a58c13d5db327e1f525d58252d7b6afa1346a0a398f885b774686
test-results-18-20
570 KB
sha256:bd61d3a9eb4a019c0811a82b32fa9cf1095161de819fbe36580e372cf526b5d1
test-results-19-20
462 KB
sha256:ca7d377c59b42839849355e9076fb79c428ef9d887096a96034cfc2bb65e2000
test-results-2-20
521 KB
sha256:da0ba0e0a6174df6a277e80bafbb30ef254e492c99f90f8f72fbee3454931ffc
test-results-20-20
360 KB
sha256:e0082079931bce976ddac709da6474c4dd30745f626c7d3b8f9d5cb20c905665
test-results-3-20
456 KB
sha256:fd2d664f904026e78ab762115042da1a2764d265d9c6613a5a42593319f02952
test-results-4-20
602 KB
sha256:f12271119f72b13d46e7269173efdc08fb71566430b5a6985ca7fff3eca881bc
test-results-5-20
505 KB
sha256:ec08a4789e571e4f2af146cb1786be375a2d2b6712343c887d8d28483d6808ae
test-results-6-20
1.79 MB
sha256:9e01b6bd030e774d8a30844e25602f9b5556a286661a6bff3681073e7ff846fa
test-results-7-20
375 KB
sha256:59b7e05300131892d02321e440fcb3ac7ea10dd18ae18a9e887eb81d08cd1e25
test-results-8-20
470 KB
sha256:7c63250fbb18505dfccbb0bbadc24e69bb27e2357a0953f0e27e8e2f6a730a0b
test-results-9-20
504 KB
sha256:38976fe83b9a86fb9369adf26e3f5e3f2fb491713feef4e9b4c61b6807cafed8