Skip to content

Commit 6d25010

Browse files
Merge branch 'develop' into release/14.0.0
2 parents 2686571 + 04c1e8c commit 6d25010

35 files changed

+321
-47
lines changed

.circleci/workflows.yml

+51-6
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ mainBuildFilters: &mainBuildFilters
3030
- /^release\/\d+\.\d+\.\d+$/
3131
# use the following branch as well to ensure that v8 snapshot cache updates are fully tested
3232
- 'update-v8-snapshot-cache-on-develop'
33-
- 'misc/remove_marionette_for_geckodriver'
33+
- 'ryanm/fix/find-process'
3434
- 'publish-binary'
3535

3636
# usually we don't build Mac app - it takes a long time
@@ -42,7 +42,7 @@ macWorkflowFilters: &darwin-workflow-filters
4242
- equal: [ develop, << pipeline.git.branch >> ]
4343
# use the following branch as well to ensure that v8 snapshot cache updates are fully tested
4444
- equal: [ 'update-v8-snapshot-cache-on-develop', << pipeline.git.branch >> ]
45-
- equal: [ 'misc/remove_marionette_for_geckodriver', << pipeline.git.branch >> ]
45+
- equal: [ 'ryanm/fix/find-process', << pipeline.git.branch >> ]
4646
- matches:
4747
pattern: /^release\/\d+\.\d+\.\d+$/
4848
value: << pipeline.git.branch >>
@@ -53,7 +53,7 @@ linuxArm64WorkflowFilters: &linux-arm64-workflow-filters
5353
- equal: [ develop, << pipeline.git.branch >> ]
5454
# use the following branch as well to ensure that v8 snapshot cache updates are fully tested
5555
- equal: [ 'update-v8-snapshot-cache-on-develop', << pipeline.git.branch >> ]
56-
- equal: [ 'misc/remove_marionette_for_geckodriver', << pipeline.git.branch >> ]
56+
- equal: [ 'ryanm/fix/find-process', << pipeline.git.branch >> ]
5757
- matches:
5858
pattern: /^release\/\d+\.\d+\.\d+$/
5959
value: << pipeline.git.branch >>
@@ -76,7 +76,7 @@ windowsWorkflowFilters: &windows-workflow-filters
7676
- equal: [ develop, << pipeline.git.branch >> ]
7777
# use the following branch as well to ensure that v8 snapshot cache updates are fully tested
7878
- equal: [ 'update-v8-snapshot-cache-on-develop', << pipeline.git.branch >> ]
79-
- equal: [ 'chore/patch_windows_build', << pipeline.git.branch >> ]
79+
- equal: [ 'ryanm/fix/find-process', << pipeline.git.branch >> ]
8080
- matches:
8181
pattern: /^release\/\d+\.\d+\.\d+$/
8282
value: << pipeline.git.branch >>
@@ -152,7 +152,7 @@ commands:
152152
name: Set environment variable to determine whether or not to persist artifacts
153153
command: |
154154
echo "Setting SHOULD_PERSIST_ARTIFACTS variable"
155-
echo 'if ! [[ "$CIRCLE_BRANCH" != "develop" && "$CIRCLE_BRANCH" != "release/"* && "$CIRCLE_BRANCH" != "misc/remove_marionette_for_geckodriver" ]]; then
155+
echo 'if ! [[ "$CIRCLE_BRANCH" != "develop" && "$CIRCLE_BRANCH" != "release/"* && "$CIRCLE_BRANCH" != "ryanm/fix/find-process" ]]; then
156156
export SHOULD_PERSIST_ARTIFACTS=true
157157
fi' >> "$BASH_ENV"
158158
# You must run `setup_should_persist_artifacts` command and be using bash before running this command
@@ -1395,6 +1395,30 @@ jobs:
13951395
PERCY_PARALLEL_NONCE=$CIRCLE_WORKFLOW_WORKSPACE_ID \
13961396
yarn percy build:finalize || yarn percy build:finalize
13971397
1398+
# verify accessibility scores from Cypress
1399+
verify-accessibility-results:
1400+
<<: *defaults
1401+
resource_class: small
1402+
steps:
1403+
- run: |
1404+
if [[ -z MAIN_RECORD_KEY ]]; then
1405+
echo "skipping for contributor PRs since we don't record to the cloud"
1406+
circleci-agent step halt
1407+
fi
1408+
- update_known_hosts
1409+
- run:
1410+
name: checkout
1411+
command: git clone -b "$CIRCLE_BRANCH" "$CIRCLE_REPOSITORY_URL" --depth 1
1412+
- run:
1413+
name: Install extract-cloud-results package
1414+
command: |
1415+
npm install https://cdn.cypress.io/extract-cloud-results/v1/extract-cloud-results.tgz
1416+
- run:
1417+
name: Verify Accessibility Results
1418+
command: |
1419+
cp ./cypress/scripts/verify-accessibility-results.js verify-accessibility-results.js
1420+
CYPRESS_RECORD_KEY=$MAIN_RECORD_KEY node verify-accessibility-results.js
1421+
13981422
ready-to-release:
13991423
<<: *defaults
14001424
resource_class: small
@@ -2673,6 +2697,25 @@ linux-x64-workflow: &linux-x64-workflow
26732697
- run-reporter-component-tests-chrome
26742698
- run-webpack-dev-server-integration-tests
26752699
- run-vite-dev-server-integration-tests
2700+
# Cypress run must be completed to fetch Accessibility report
2701+
- verify-accessibility-results:
2702+
context: test-runner:cypress-record-key
2703+
requires:
2704+
- reporter-integration-tests
2705+
- run-app-component-tests-chrome
2706+
- run-app-integration-tests-chrome
2707+
- run-frontend-shared-component-tests-chrome
2708+
- run-launchpad-component-tests-chrome
2709+
- run-launchpad-integration-tests-chrome
2710+
- run-reporter-component-tests-chrome
2711+
- run-webpack-dev-server-integration-tests
2712+
- run-vite-dev-server-integration-tests
2713+
- driver-integration-tests-firefox
2714+
- driver-integration-tests-chrome
2715+
- driver-integration-tests-chrome-beta
2716+
- driver-integration-tests-electron
2717+
- driver-integration-tests-webkit
2718+
- driver-integration-memory-tests
26762719
- lint-types:
26772720
requires:
26782721
- build
@@ -3008,7 +3051,9 @@ linux-x64-contributor-workflow: &linux-x64-contributor-workflow
30083051
type: approval
30093052
requires:
30103053
- build
3011-
3054+
# verify-accessibility-results is required for status checks, however, it will be skipped for contributors so it
3055+
# can run in any order
3056+
- verify-accessibility-results
30123057
- check-ts:
30133058
requires:
30143059
- build

browser-versions.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"chrome:beta": "130.0.6723.19",
3-
"chrome:stable": "129.0.6668.89",
2+
"chrome:beta": "130.0.6723.31",
3+
"chrome:stable": "129.0.6668.100",
44
"chrome:minimum": "64.0.3282.0"
55
}

cli/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ _Released 12/3/2024 (PENDING)_
1313

1414
_Released 10/1/2024 (PENDING)_
1515

16+
**Bugfixes:**
17+
18+
- Patched [find-process](https://github.com/yibn2008/find-process) to fix an issue where trying to clean up browser profiles can throw an error on Windows. Addresses [#30378](https://github.com/cypress-io/cypress/issues/30378).
19+
1620
**Misc:**
1721

1822
- Cypress now consumes [geckodriver](https://firefox-source-docs.mozilla.org/testing/geckodriver/index.html) to help automate the Firefox browser instead of [marionette-client](https://github.com/cypress-io/marionette-client). Addresses [#30217](https://github.com/cypress-io/cypress/issues/30217).

packages/app/cypress/e2e/create-from-component.cy.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function validateCreateFromVueComponentCard (beforeEachFn: () => void, expectedS
3939

4040
cy.findByText('*.vue').should('be.visible')
4141
cy.findByText('2 matches').should('be.visible')
42-
cy.findByLabelText('file-name-input').type('HelloWorld')
42+
cy.findByLabelText('Search by filename').type('HelloWorld')
4343

4444
cy.findByText('HelloWorld').should('be.visible')
4545
cy.findByText('1 of 2 matches').should('be.visible')
@@ -124,7 +124,7 @@ function validateCreateFromReactComponentCard (beforeEachFn: () => void, expecte
124124

125125
cy.findByText('*.{js,jsx,tsx}').should('be.visible')
126126
cy.findByText('5 matches').should('be.visible')
127-
cy.findByLabelText('file-name-input').type('App')
127+
cy.findByLabelText('Search by filename').type('App')
128128

129129
cy.findByText('App').should('be.visible')
130130
cy.findByText('1 of 5 matches').should('be.visible')

packages/app/cypress/e2e/specs.cy.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ describe('App: Specs', () => {
347347
.and('contain', defaultMessages.createSpec.page.customPatternNoSpecs.description.split('{0}')[0])
348348

349349
cy.findByTestId('file-match-indicator').should('contain', 'No matches')
350-
cy.findByRole('button', { name: 'cypress.config.js' })
350+
cy.findByRole('button', { name: 'open in IDE' })
351351
cy.findByTestId('spec-pattern').should('contain', 'src/**/*.{cy,spec}.{js,jsx}')
352352

353353
cy.contains('button', defaultMessages.createSpec.updateSpecPattern)
@@ -359,7 +359,7 @@ describe('App: Specs', () => {
359359
o.sinon.stub(ctx.actions.file, 'openFile')
360360
})
361361

362-
cy.findByRole('button', { name: 'cypress.config.js' }).click()
362+
cy.findByRole('button', { name: 'open in IDE' }).click()
363363

364364
cy.withCtx((ctx, o) => {
365365
expect(ctx.actions.file.openFile).to.have.been.calledWith(o.sinon.match(new RegExp(`cypress\.config\.js$`)), 1, 1)
@@ -695,7 +695,7 @@ describe('App: Specs', () => {
695695
.and('contain', defaultMessages.createSpec.page.customPatternNoSpecs.description.split('{0}')[0])
696696

697697
cy.findByTestId('file-match-indicator').should('contain', 'No matches')
698-
cy.findByRole('button', { name: 'cypress.config.js' })
698+
cy.findByRole('button', { name: 'open in IDE' })
699699
cy.findByTestId('spec-pattern').should('contain', 'src/specs-folder/*.cy.{js,jsx}')
700700

701701
cy.contains('button', defaultMessages.createSpec.updateSpecPattern)
@@ -707,7 +707,7 @@ describe('App: Specs', () => {
707707
o.sinon.stub(ctx.actions.file, 'openFile')
708708
})
709709

710-
cy.findByRole('button', { name: 'cypress.config.js' }).click()
710+
cy.findByRole('button', { name: 'open in IDE' }).click()
711711

712712
cy.withCtx((ctx, o) => {
713713
expect(ctx.actions.file.openFile).to.have.been.calledWith(o.sinon.match(new RegExp(`cypress\.config\.js$`)), 1, 1)

packages/app/src/components/FileMatch.vue

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<div class="rounded border h-[40px] w-full inline-flex items-center hocus-default focus-within-default truncate">
3232
<FileMatchButton
3333
:expanded="expanded"
34+
:aria-label="t('components.fileSearch.expandToSearchByExtensions')"
3435
@click="toggleExpanded()"
3536
>
3637
<span v-if="!expanded">{{ localExtensionPattern }}</span>
@@ -45,12 +46,13 @@
4546
v-if="expanded"
4647
v-model="localExtensionPattern"
4748
class="ml-[12px]"
49+
:aria-label="t('components.fileSearch.byExtensionInput')"
4850
:placeholder="t('components.fileSearch.byExtensionInput')"
4951
/>
5052
<FileMatchInput
5153
v-else
5254
v-model="localPattern"
53-
aria-label="file-name-input"
55+
aria-label="Search by filename"
5456
:placeholder="t('components.fileSearch.byFilenameInput')"
5557
/>
5658
</div>
@@ -72,6 +74,7 @@
7274
<i-cy-magnifying-glass_x16 class="mr-[8px] ml-[12px] inline-block icon-light-gray-50 icon-dark-gray-500 group-focus-within:icon-light-indigo-50 group-focus-within:icon-dark-indigo-400" />
7375
<FileMatchInput
7476
v-model="localPattern"
77+
:aria-label="t('components.fileSearch.byFilenameInput')"
7578
:placeholder="t('components.fileSearch.byFilenameInput')"
7679
/>
7780
</div>

packages/app/src/components/FileMatchInput.cy.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ describe('<FileMatchInput />', () => {
1515
}
1616

1717
cy.mount(() => (<div class="p-12">
18-
<FileMatchInput modelValue={inputText.value} {...methods} />
18+
<FileMatchInput aria-label="search for file" modelValue={inputText.value} {...methods} />
1919
</div>))
2020
.get('input[type=search]').should('have.value', initialText)
2121
.clear().type(newText)

packages/app/src/components/SpecPatterns.vue

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
>
1212
<button
1313
class="flex outline-transparent text-indigo-500 gap-[8px] items-center group"
14+
aria-label="open in IDE"
1415
@click="onClick"
1516
>
1617
<i-cy-document-text_x16 class="icon-light-gray-100 icon-dark-gray-500" />

packages/app/src/runner/SnapshotControls.vue

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
v-if="shouldShowStateControls || shouldShowHighlightControls"
3232
class="border-transparent rounded outline-none bg-gray-900 border my-1 mr-[2px] transition duration-150 hocus:border-purple-300 "
3333
style="padding: 3px"
34+
aria-label="unpin snapshot"
3435
@click="unpin"
3536
>
3637
<i-cy-delete_x16

packages/app/src/runner/SnapshotHighlightControls.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<template>
22
<div class="rounded flex font-medium bg-gray-900 py-[2px] px-[12px] text-gray-200 text-[14px] leading-[20px] gap-[8px] items-center">
33
<Switch
4-
name="toggle-highlights"
4+
label-id="toggle-highlights"
55
:value="props.value"
66
size="sm"
77
@update="emits('toggle')"
88
/>
99
<label
10-
for="toggle-highlights"
10+
id="toggle-highlights"
1111
class="cursor-pointer"
1212
>{{ t('runner.snapshot.highlightsLabel') }}
1313
</label>

packages/app/src/runner/SpecRunnerHeaderOpenMode.vue

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
ref="autUrlInputRef"
2828
:value="studioStore.needsUrl ? urlInProgress : autUrl"
2929
data-cy="aut-url-input"
30+
aria-label="url of the application under test"
3031
class="flex grow mr-[12px] leading-normal max-w-full text-indigo-500 z-51 self-center hocus-link-default truncate"
3132
@input="setStudioUrl"
3233
@click="openExternally"

packages/app/src/runner/selector-playground/SelectorPlayground.vue

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
>
1010
<button
1111
class="border rounded-md flex h-full outline-none border-gray-200 text-white transition w-[40px] duration-150 items-center justify-center hocus-default"
12+
:aria-label="selectorPlaygroundStore.isEnabled ? 'click to interact with the application and build test cases' : 'click to exit interactive test building mode'"
1213
data-cy="playground-toggle"
1314
@click="toggleEnabled"
1415
>
@@ -64,6 +65,7 @@
6465
autocomplete="off"
6566
autocorrect="off"
6667
spellcheck="false"
68+
aria-label="selector"
6769
data-cy="playground-selector"
6870
:style="{paddingLeft: leftOfInputText + 'ch', paddingRight: widthOfMatchesHelperText + 'px'}"
6971
class="border rounded-r-md font-medium h-full outline-none border-gray-200 w-full text-indigo-500 hocus-default overflow-ellipsis"
@@ -103,6 +105,7 @@
103105
variant="outline"
104106
data-cy="playground-copy"
105107
class="override-border"
108+
aria-label="click to copy command to clipboard"
106109
@click="copyToClipboard"
107110
@focus="focus"
108111
>
@@ -124,6 +127,7 @@
124127
variant="outline"
125128
data-cy="playground-print"
126129
class="override-border"
130+
aria-label="click to print command to console"
127131
@click="printSelected()"
128132
@focus="focus"
129133
>

packages/app/src/settings/SettingsSection.vue

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template>
22
<section :id="anchor">
33
<h2
4+
:id="labelId"
45
class="font-medium text-[16px] text-gray-900 leading-[24px] inline-flex items-baseline align-middle"
56
>
67
<slot name="title" />
@@ -22,5 +23,6 @@
2223
defineProps<{
2324
code?: string
2425
anchor?: string
26+
labelId?: string
2527
}>()
2628
</script>

packages/app/src/settings/device/ExternalEditorSettings.vue

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
<template>
2-
<SettingsSection>
3-
<template #title>
2+
<SettingsSection
3+
label-id="choose-editor-label"
4+
>
5+
<template
6+
#title
7+
>
48
{{ t('settingsPage.editor.title') }}
59
</template>
610
<template #description>
@@ -10,6 +14,7 @@
1014
<ChooseExternalEditor
1115
v-if="props.gql.localSettings"
1216
:gql="props.gql"
17+
label-id="choose-editor-label"
1318
@chose-editor="handleChoseEditor"
1419
/>
1520
</SettingsSection>

packages/app/src/settings/device/NotificationSettings.vue

+6-3
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,17 @@
3232

3333
<div class="px-[16px] divide-y divide-gray-50">
3434
<div
35-
v-for="({id, title}) in switches"
35+
v-for="({id, labelId, title}) in switches"
3636
:key="id"
3737
class="py-[16px]"
3838
>
3939
<h4 class="flex text-gray-800 text-[16px] leading-[24px] items-center">
40-
<label :for="id">{{ title }}</label>
40+
<label :id="labelId">{{ title }}</label>
4141
<Switch
42+
:id="id"
4243
class="mx-[8px]"
4344
:value="props.gql.localSettings.preferences[id] ?? false"
44-
:name="id"
45+
:label-id="labelId"
4546
:disabled="!desktopNotificationsEnabled"
4647
@update="(value) => updatePref(id, value)"
4748
/>
@@ -149,10 +150,12 @@ mutation NotificationSettings_ShowNotification($title: String!, $body: String!)
149150
const switches = [
150151
{
151152
id: 'notifyWhenRunStarts',
153+
labelId: 'notifyWhenRunStartsLabel',
152154
title: t('settingsPage.notifications.notifyMeWhenRunStarts'),
153155
},
154156
{
155157
id: 'notifyWhenRunStartsFailing',
158+
labelId: 'notifyWhenRunStartsFailingLabel',
156159
title: t('settingsPage.notifications.notifyMeWhenRunIsFailing'),
157160
},
158161
]

packages/app/src/settings/device/TestingPreferences.cy.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('<TestingPreferences />', () => {
2828
</div>),
2929
})
3030

31-
cy.get(`#autoScrollingEnabled[role="switch"]`)
31+
cy.get(`#autoScrollingToggle[role="switch"]`)
3232
.should('have.attr', 'aria-checked', 'false')
3333
})
3434
})

packages/app/src/settings/device/TestingPreferences.vue

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
>
1212
<div class="py-[16px]">
1313
<h4 class="flex text-gray-800 text-[16px] leading-[24px] items-center">
14-
<label :for="autoScrollingPreference.id">{{ autoScrollingPreference.title }}</label>
14+
<label :id="autoScrollingPreference.id">{{ autoScrollingPreference.title }}</label>
1515
<Switch
16+
id="autoScrollingToggle"
1617
class="mx-[8px]"
1718
:value="props.gql.localSettings.preferences[autoScrollingPreference.id] ?? false"
18-
:name="autoScrollingPreference.id"
19+
:label-id="autoScrollingPreference.id"
1920
@update="(value) => updatePref(value)"
2021
/>
2122
</h4>

packages/app/src/specs/InlineRunAllSpecs.vue

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<button
77
class="flex h-full w-full items-center justify-center"
88
data-cy="run-all-specs-button"
9+
:aria-label="t('specPage.runSelectedSpecs', specNumber)"
910
:disabled="specNumber === 0"
1011
@click.stop="emits('runAllSpecs')"
1112
>

0 commit comments

Comments
 (0)