UNPKG

quoad

Version:

Serenity/JS: Next generation acceptance testing library for modern web applications.

132 lines (106 loc) 5.75 kB
import 'mocha'; import { expect } from '@integration/testing-tools'; import { Ensure, equals, not } from '@serenity-js/assertions'; import { actorCalled, Wait } from '@serenity-js/core'; import { Attribute, By, Hover, isVisible, Navigate, PageElement, PageElements, Text } from '@serenity-js/web'; describe('isVisible', function () { describe('when working with standard document structure', () => { const Elements = { displayed: () => PageElement.located(By.id('displayed')).describedAs('visible element'), notDisplayed: () => PageElement.located(By.id('display-none')).describedAs('not displayed element'), nonExistent: () => PageElement.located(By.id('does-not-exist')).describedAs('non-existent element'), nonExistentElements: () => PageElements.located(By.id('does-not-exist')).describedAs('non-existent elements'), hidden: () => PageElement.located(By.id('visibility-hidden')).describedAs('hidden element'), notInViewport: () => PageElement.located(By.id('not-in-viewport')).describedAs('element outside of the browser viewport'), transparent: () => PageElement.located(By.id('opacity-zero')).describedAs('a fully transparent element'), foreground: () => PageElement.located(By.id('foreground')).describedAs('element in the foreground'), background: () => PageElement.located(By.id('background')).describedAs('element in the background'), }; beforeEach(() => actorCalled('Wendy').attemptsTo( Navigate.to('/expectations/is-visible/visibility.html'), )); describe('resolves to true when the element', () => { /** @test {isVisible} */ it('is displayed', () => actorCalled('Wendy').attemptsTo( Ensure.that(Elements.displayed(), isVisible()), )); /** @test {isVisible} */ it('is not covered by other elements', () => actorCalled('Wendy').attemptsTo( Ensure.that(Elements.foreground(), isVisible()), )); }); describe('resolves to false when the element', () => { /** @test {isVisible} */ it('is not displayed', () => // expect( actorCalled('Wendy').attemptsTo( Ensure.that(Elements.notDisplayed(), not(isVisible())), )); /** @test {isVisible} */ it('does not exist', () => expect(actorCalled('Wendy').attemptsTo( Ensure.that(Elements.nonExistent(), not(isVisible())), ))); /** @test {isVisible} */ it('does not exist in a list of PageElements', () => expect(actorCalled('Wendy').attemptsTo( Ensure.that(Elements.nonExistentElements().first(), not(isVisible())), ))); /** @test {isVisible} */ it('is hidden', () => actorCalled('Wendy').attemptsTo( Ensure.that(Elements.hidden(), not(isVisible())), )); /** @test {isVisible} */ it('is not in the viewport', () => actorCalled('Wendy').attemptsTo( Ensure.that(Elements.notInViewport(), not(isVisible())), )); /** @test {isVisible} */ it('is transparent', () => actorCalled('Wendy').attemptsTo( Ensure.that(Elements.transparent(), not(isVisible())), )); /** @test {isVisible} */ it('is covered by other elements', () => actorCalled('Wendy').attemptsTo( Ensure.that(Elements.background(), not(isVisible())), )); }); /** @test {isVisible} */ it('contributes to a human-readable description of an assertion', () => { expect(Ensure.that(Elements.displayed(), isVisible()).toString()) .to.equal(`#actor ensures that visible element does become visible`); }); /** @test {isVisible} */ it('contributes to a human-readable description of a wait', () => { expect(Wait.until(Elements.displayed(), isVisible()).toString()) .to.equal(`#actor waits until visible element does become visible`); }); }); describe('when working with Shadow DOM', () => { const Elements = { cvcLabel: PageElement.located(By.tagName('label')).describedAs('popup label'), infoComponent: PageElement.located(By.tagName('popup-info')).describedAs('popup info icon'), infoText: PageElement.located(By.deepCss('popup-info span.info')).describedAs('popup text'), }; beforeEach(() => actorCalled('Wendy').attemptsTo( Navigate.to('/expectations/is-visible/shadow_dom.html'), )); describe('resolves to true when the element', () => { /** @test {isVisible} */ it('is displayed', () => actorCalled('Wendy').attemptsTo( Ensure.that(Elements.infoComponent, isVisible()), Ensure.that(Elements.infoText, not(isVisible())), Hover.over(Elements.infoComponent), Ensure.that(Elements.infoText, isVisible()), Ensure.that(Text.of(Elements.infoText), equals(Attribute.called('data-text').of(Elements.infoComponent))), )); }); }); });