From 2142fde4605fa0b75af30f934891ba797ec098af Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Fri, 19 Aug 2022 17:40:13 -0700 Subject: [PATCH] test(isVisible): add a couple of basic tests (#16697) --- tests/page/locator-convenience.spec.ts | 59 ----------------- tests/page/locator-is-visible.spec.ts | 87 ++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 59 deletions(-) create mode 100644 tests/page/locator-is-visible.spec.ts diff --git a/tests/page/locator-convenience.spec.ts b/tests/page/locator-convenience.spec.ts index 99c687c0c2..1208b6324a 100644 --- a/tests/page/locator-convenience.spec.ts +++ b/tests/page/locator-convenience.spec.ts @@ -95,25 +95,6 @@ it('textContent should work', async ({ page, server }) => { expect(await page.textContent('#inner')).toBe('Text,\nmore text'); }); -it('isVisible and isHidden should work', async ({ page }) => { - await page.setContent(`
Hi
`); - - const div = page.locator('div'); - expect(await div.isVisible()).toBe(true); - expect(await div.isHidden()).toBe(false); - expect(await page.isVisible('div')).toBe(true); - expect(await page.isHidden('div')).toBe(false); - - const span = page.locator('span'); - expect(await span.isVisible()).toBe(false); - expect(await span.isHidden()).toBe(true); - expect(await page.isVisible('span')).toBe(false); - expect(await page.isHidden('span')).toBe(true); - - expect(await page.isVisible('no-such-element')).toBe(false); - expect(await page.isHidden('no-such-element')).toBe(true); -}); - it('isEnabled and isDisabled should work', async ({ page }) => { await page.setContent(` @@ -173,20 +154,6 @@ it('allInnerTexts should work', async ({ page }) => { expect(await page.locator('div').allInnerTexts()).toEqual(['A', 'B', 'C']); }); -it('isVisible and isHidden should work with details', async ({ page }) => { - it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/10674' }); - await page.setContent(`
- click to open - `); - - await expect(page.locator('ul')).toBeHidden(); -}); - it('should return page', async ({ page, server }) => { await page.goto(server.PREFIX + '/frames/two-frames.html'); const outer = page.locator('#outer'); @@ -198,29 +165,3 @@ it('should return page', async ({ page, server }) => { const inFrame = page.frames()[1].locator('div'); expect(inFrame.page()).toBe(page); }); - -it('isVisible inside a button', async ({ page }) => { - await page.setContent(``); - const span = page.locator('span'); - expect(await span.isVisible()).toBe(false); - expect(await span.isHidden()).toBe(true); - expect(await page.isVisible('span')).toBe(false); - expect(await page.isHidden('span')).toBe(true); - await expect(span).not.toBeVisible(); - await expect(span).toBeHidden(); - await span.waitFor({ state: 'hidden' }); - await page.locator('button').waitFor({ state: 'visible' }); -}); - -it('isVisible inside a role=button', async ({ page }) => { - await page.setContent(`
a button
`); - const span = page.locator('span'); - expect(await span.isVisible()).toBe(false); - expect(await span.isHidden()).toBe(true); - expect(await page.isVisible('span')).toBe(false); - expect(await page.isHidden('span')).toBe(true); - await expect(span).not.toBeVisible(); - await expect(span).toBeHidden(); - await span.waitFor({ state: 'hidden' }); - await page.locator('[role=button]').waitFor({ state: 'visible' }); -}); diff --git a/tests/page/locator-is-visible.spec.ts b/tests/page/locator-is-visible.spec.ts new file mode 100644 index 0000000000..2c607ac921 --- /dev/null +++ b/tests/page/locator-is-visible.spec.ts @@ -0,0 +1,87 @@ +/** + * Copyright 2018 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { test as it, expect } from './pageTest'; + +it('isVisible and isHidden should work', async ({ page }) => { + await page.setContent(`
Hi
`); + + const div = page.locator('div'); + expect(await div.isVisible()).toBe(true); + expect(await div.isHidden()).toBe(false); + expect(await page.isVisible('div')).toBe(true); + expect(await page.isHidden('div')).toBe(false); + + const span = page.locator('span'); + expect(await span.isVisible()).toBe(false); + expect(await span.isHidden()).toBe(true); + expect(await page.isVisible('span')).toBe(false); + expect(await page.isHidden('span')).toBe(true); + + expect(await page.isVisible('no-such-element')).toBe(false); + expect(await page.isHidden('no-such-element')).toBe(true); +}); + +it('isVisible should be true for opacity:0', async ({ page }) => { + await page.setContent(`
Hi
`); + await expect(page.locator('div')).toBeVisible(); +}); + +it('isVisible should be true for element outside view', async ({ page }) => { + await page.setContent(`
Hi
`); + await expect(page.locator('div')).toBeVisible(); +}); + +it('isVisible and isHidden should work with details', async ({ page }) => { + it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/10674' }); + await page.setContent(`
+ click to open +
    +
  • hidden item 1
  • +
  • hidden item 2
  • +
  • hidden item 3
  • +
`); + + await expect(page.locator('ul')).toBeHidden(); +}); + +it('isVisible inside a button', async ({ page }) => { + await page.setContent(``); + const span = page.locator('span'); + expect(await span.isVisible()).toBe(false); + expect(await span.isHidden()).toBe(true); + expect(await page.isVisible('span')).toBe(false); + expect(await page.isHidden('span')).toBe(true); + await expect(span).not.toBeVisible(); + await expect(span).toBeHidden(); + await span.waitFor({ state: 'hidden' }); + await page.locator('button').waitFor({ state: 'visible' }); +}); + +it('isVisible inside a role=button', async ({ page }) => { + await page.setContent(`
a button
`); + const span = page.locator('span'); + expect(await span.isVisible()).toBe(false); + expect(await span.isHidden()).toBe(true); + expect(await page.isVisible('span')).toBe(false); + expect(await page.isHidden('span')).toBe(true); + await expect(span).not.toBeVisible(); + await expect(span).toBeHidden(); + await span.waitFor({ state: 'hidden' }); + await page.locator('[role=button]').waitFor({ state: 'visible' }); +});