From 9b2b260253238f2dd1cd9cc900275bbf8d062349 Mon Sep 17 00:00:00 2001 From: BlueWinds Date: Wed, 21 Dec 2022 09:29:09 -0800 Subject: [PATCH 1/3] fix: .contains() should only return one element at all times --- .../driver/cypress/e2e/commands/querying/querying.cy.js | 5 +++++ packages/driver/src/cy/commands/querying/querying.ts | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/driver/cypress/e2e/commands/querying/querying.cy.js b/packages/driver/cypress/e2e/commands/querying/querying.cy.js index 4759ff07d184..fccaf8f3052b 100644 --- a/packages/driver/cypress/e2e/commands/querying/querying.cy.js +++ b/packages/driver/cypress/e2e/commands/querying/querying.cy.js @@ -1020,6 +1020,11 @@ describe('src/cy/commands/querying', () => { }) }) + // https://github.com/cypress-io/cypress/issues/25225 + it('returns one element when given multiple subjects with no children', () => { + cy.get('button').contains('submit').should('have.length', 1) + }) + // https://github.com/cypress-io/cypress/issues/25019 it('can locate elements contained inside
containers', () => { cy.get('#focus').contains('button', 'focusable') diff --git a/packages/driver/src/cy/commands/querying/querying.ts b/packages/driver/src/cy/commands/querying/querying.ts index 243de6fbc845..53da09ff071b 100644 --- a/packages/driver/src/cy/commands/querying/querying.ts +++ b/packages/driver/src/cy/commands/querying/querying.ts @@ -327,14 +327,14 @@ export default (Commands, Cypress, cy, state) => { $el = $el.add(getFn()) }) - if ($el.length) { - $el = $dom.getFirstDeepestElement($el) - } else { + if (!$el.length) { // .get() looks for elements *inside* the current subject, while contains() wants to also match the current // subject itself if no child matches. $el = (subject as JQuery).filter(selector) } + $el = $dom.getFirstDeepestElement($el) + log && cy.state('current') === this && log.set({ $el, consoleProps: () => { From d9976f5f93c96f580741b046eb17852600002870 Mon Sep 17 00:00:00 2001 From: BlueWinds Date: Tue, 27 Dec 2022 08:45:56 -0800 Subject: [PATCH 2/3] Improve test name --- packages/driver/cypress/e2e/commands/querying/querying.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/driver/cypress/e2e/commands/querying/querying.cy.js b/packages/driver/cypress/e2e/commands/querying/querying.cy.js index fccaf8f3052b..040257db85f1 100644 --- a/packages/driver/cypress/e2e/commands/querying/querying.cy.js +++ b/packages/driver/cypress/e2e/commands/querying/querying.cy.js @@ -1021,7 +1021,7 @@ describe('src/cy/commands/querying', () => { }) // https://github.com/cypress-io/cypress/issues/25225 - it('returns one element when given multiple subjects with no children', () => { + it('returns only one element when given multiple subjects directly match selector', () => { cy.get('button').contains('submit').should('have.length', 1) }) From 37fb0dbb84d745d865b1dd0abeeb764521de4b52 Mon Sep 17 00:00:00 2001 From: BlueWinds Date: Tue, 3 Jan 2023 08:47:52 -0800 Subject: [PATCH 3/3] Add additional test --- packages/driver/cypress/e2e/commands/querying/querying.cy.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/driver/cypress/e2e/commands/querying/querying.cy.js b/packages/driver/cypress/e2e/commands/querying/querying.cy.js index 040257db85f1..abb5f7a8c370 100644 --- a/packages/driver/cypress/e2e/commands/querying/querying.cy.js +++ b/packages/driver/cypress/e2e/commands/querying/querying.cy.js @@ -1022,7 +1022,11 @@ describe('src/cy/commands/querying', () => { // https://github.com/cypress-io/cypress/issues/25225 it('returns only one element when given multiple subjects directly match selector', () => { + // A case with only a text selector cy.get('button').contains('submit').should('have.length', 1) + + // A case with a filter + text selector + cy.get('div').contains('div', 'foo').should('have.length', 1) }) // https://github.com/cypress-io/cypress/issues/25019