From 77f67eba0c49d592e571948d0ba5c29b9a60b35b Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Wed, 23 Sep 2026 18:52:00 -0700 Subject: [PATCH] test(locators): parse nested locators in locator(), and() and or() Fixes: https://github.com/microsoft/playwright/issues/42891 --- tests/library/locator-generator.spec.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/library/locator-generator.spec.ts b/tests/library/locator-generator.spec.ts index dfdba4c4729dd..f77978385b5e7 100644 --- a/tests/library/locator-generator.spec.ts +++ b/tests/library/locator-generator.spec.ts @@ -619,6 +619,23 @@ it('parseLocator and, or, chain', async () => { } }); +it('parseLocator nested and, or, locator', { + annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/42891' } +}, async ({ page }) => { + expect.soft(generate(page.getByRole('row').locator(page.getByRole('cell').nth(2)))).toEqual({ + csharp: `GetByRole(AriaRole.Row).Locator(GetByRole(AriaRole.Cell).Nth(2))`, + java: `getByRole(AriaRole.ROW).locator(getByRole(AriaRole.CELL).nth(2))`, + javascript: `getByRole('row').locator(getByRole('cell').nth(2))`, + python: `get_by_role("row").locator(get_by_role("cell").nth(2))`, + }); + expect.soft(generate(page.locator('div').and(page.getByText('foo')).or(page.locator('span').locator(page.locator('a'))).first())).toEqual({ + csharp: `Locator("div").And(GetByText("foo")).Or(Locator("span").Locator(Locator("a"))).First`, + java: `locator("div").and(getByText("foo")).or(locator("span").locator(locator("a"))).first()`, + javascript: `locator('div').and(getByText('foo')).or(locator('span').locator(locator('a'))).first()`, + python: `locator("div").and_(get_by_text("foo")).or_(locator("span").locator(locator("a"))).first`, + }); +}); + it('asLocator xpath', async () => { const selector = `//*[contains(normalizer-text(), 'foo']`; expect.soft(asLocator('javascript', selector)).toBe(`locator('//*[contains(normalizer-text(), \\'foo\\']')`);