Skip to content

refactor(core): use Capacitor safe-area CSS variables on older WebViews #17759

refactor(core): use Capacitor safe-area CSS variables on older WebViews

refactor(core): use Capacitor safe-area CSS variables on older WebViews #17759

Triggered via pull request December 12, 2025 16:29
Status Success
Total duration 13m 36s
Artifacts 27

build.yml

on: pull_request
build-react
51s
build-react
build-vue
38s
build-vue
Matrix: test-core-screenshot
build-angular
1m 30s
build-angular
build-angular-server
38s
build-angular-server
test-core-clean-build
13s
test-core-clean-build
test-core-lint
53s
test-core-lint
test-core-spec
48s
test-core-spec
build-react-router
31s
build-react-router
build-vue-router
39s
build-vue-router
verify-screenshots
4s
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
4s
verify-test-react-e2e
verify-test-react-router-e2e
2s
verify-test-react-router-e2e
verify-test-vue-e2e
3s
verify-test-vue-e2e
Fit to window
Zoom out
Zoom in

Annotations

5 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: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
2) [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 Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › tabbing should switch between radio groups: src/components/radio/test/a11y/radio.e2e.ts#L122
1) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › 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 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 Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── 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
[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.5m)
🎭 Playwright Run Summary
8 skipped 688 passed (3.8m)
🎭 Playwright Run Summary
2 skipped 667 passed (3.7m)
🎭 Playwright Run Summary
1 skipped 676 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:117:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › tabbing should switch between radio groups [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: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.1m)
🎭 Playwright Run Summary
36 skipped 824 passed (5.8m)
🎭 Playwright Run Summary
14 skipped 491 passed (6.1m)
🎭 Playwright Run Summary
10 skipped 648 passed (6.8m)
🎭 Playwright Run Summary
5 skipped 681 passed (7.1m)
🎭 Playwright Run Summary
3 skipped 664 passed (7.5m)
🎭 Playwright Run Summary
1 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 5 skipped 719 passed (7.9m)
🎭 Playwright Run Summary
5 skipped 668 passed (8.4m)
🎭 Playwright Run Summary
12 skipped 685 passed (8.4m)
🎭 Playwright Run Summary
13 skipped 659 passed (8.4m)
🎭 Playwright Run Summary
1 skipped 656 passed (8.6m)
🎭 Playwright Run Summary
4 skipped 738 passed (9.5m)
🎭 Playwright Run Summary
14 skipped 682 passed (10.0m)
🎭 Playwright Run Summary
18 skipped 617 passed (10.3m)

Artifacts

Produced during runtime
Name Size Digest
ionic-angular
805 KB
sha256:8182d73110a1c3c6b3e58c917c60ad9ec7c8ec680a319b51364ed4fd36b0d20c
ionic-angular-server
8.54 KB
sha256:9c5654e1ed82379be2705c4e05d5b8e3d6047afa99248e42046d9563f9d1e4fe
ionic-core
5.15 MB
sha256:a97a1ccd15577d57a5e5ff9fcb8e99e6c98ff0749f6884f45c87e021cd861882
ionic-react
343 KB
sha256:932e9f1f51b41034567a3e79f931b98e8d7a1b63ba85969065b097475e99f899
ionic-react-router
27.9 KB
sha256:77961a1133ba2d4d0e818e08d45f46b963e4b6675a4da68ad31709b2ba6a949b
ionic-vue
374 KB
sha256:eef6feca2d8fabe54a1bb1095ef078880b5f2930b95195bea3e3b8ac01a9517e
ionic-vue-router
17.1 KB
sha256:bc58445a73bb71c289db5203cbc93b3b962e83e1c645f39e2c9121e50455a889
test-results-1-20
515 KB
sha256:d1fef9f53eea3b187ef47a64b82b31e69066011dbc4418155131dbfdba3e0b8f
test-results-10-20
460 KB
sha256:fd6220f4cd9df5935356b9b98d23ff9e60d4cdb72282e68390c3dfb0585ab5f1
test-results-11-20
2.08 MB
sha256:4eec5b7574ab0296fe481994bb3970a8d74c03f99e6642942c2b3d66914496f2
test-results-12-20
498 KB
sha256:023a1ae3f227fb9e2b0981d91f3b7e9aeb503da0cbdc05e84f3cbad4db319df3
test-results-13-20
522 KB
sha256:7064386ed51f83506c45f1f5b4702a6d8236567be30ad50a0bf8457299366fcf
test-results-14-20
443 KB
sha256:1d143aa3dd95fe84b7c3f29a7cab2b8ba05e3e7480fbd90bce73217483f1681d
test-results-15-20
477 KB
sha256:05ad11437119650fd2b8b6f3beb2520563e8e80b6b7124f670045305075c9d90
test-results-16-20
494 KB
sha256:be869d7c5c264cc0fa2220c350598b1d03e9b40e715d19089dc1cde8bc369d0e
test-results-17-20
576 KB
sha256:a38993ebc6a7a0cefcd253b0aa352bddf1967380cc8e231c9036846c6f7e490d
test-results-18-20
570 KB
sha256:2892e9f0584c35469bc5c42237929ba2ff06aa5f3a4b37113326bd2aea9f18be
test-results-19-20
463 KB
sha256:2900345edd4e6abba7c837579c179e59cc4b786d5856f79d46adf7ad1ac54704
test-results-2-20
523 KB
sha256:11f776dc545717520d2d8e9ad76eea61daeb407d016db4f10ada5cbc4a3b55b6
test-results-20-20
360 KB
sha256:329f1208497aadc725d8e09992996b3dc3ec4e51fd47ed095df17ea7994d6b4b
test-results-3-20
456 KB
sha256:88af9613335e36a4f47f541fc2c9c64d2f8bda7cb3f5a9b6f98f52fcb6f675a5
test-results-4-20
601 KB
sha256:fbe014f11bb48ad90f3533fa5be3702a7636e408f8be4f1f6b164614bd78bc3c
test-results-5-20
505 KB
sha256:928f47f74d7d4ba348e5478fa529f35e65ba6091b1dcf0076ea1924378b46f22
test-results-6-20
1.69 MB
sha256:e755185cd7b9ac1b01d79e0f6ec1e5b64cd30016a6b0a4bc49182762ff088df1
test-results-7-20
375 KB
sha256:758cff0d11ec14356049b113d7be74d6c12bcfbfd071991500b8eb23ed494bdc
test-results-8-20
469 KB
sha256:7f2a42b548bf7382c55f8fb3a0f03766e9cb2fc57c294bc12aa90acf5be6c2e1
test-results-9-20
504 KB
sha256:86b0e26098d1cbbc9650e5e1712a4879731c6951f40aa0c71874e04ca336b87c