diff --git a/test/helpers/selenium-helper.js b/test/helpers/selenium-helper.js index 2d979e4486221ed08b770c2a572572d4f2e8f498..1d1ba1e6a849456058d25356fcf989d6cd40fe8b 100644 --- a/test/helpers/selenium-helper.js +++ b/test/helpers/selenium-helper.js @@ -14,6 +14,8 @@ class SeleniumHelper { 'clickText', 'clickButton', 'clickXpath', + 'elementIsVisible', + 'elementIsNotVisible', 'findByText', 'findByXpath', 'getDriver', @@ -24,6 +26,13 @@ class SeleniumHelper { ]); } + elementIsVisible (element) { + return this.driver.wait(until.elementIsVisible(element)); + } + elementIsNotVisible (element) { + return this.driver.wait(until.elementIsNotVisible(element)); + } + get scope () { // List of useful xpath scopes for finding elements return { diff --git a/test/integration/sprites.test.js b/test/integration/sprites.test.js index 8e57fc1a6a2aec31b2c67d313868e3c83196fb36..178fb6b984f75981cf160cc014894d4daaf4b5f1 100644 --- a/test/integration/sprites.test.js +++ b/test/integration/sprites.test.js @@ -4,6 +4,7 @@ import SeleniumHelper from '../helpers/selenium-helper'; const { clickText, clickXpath, + elementIsVisible, findByText, findByXpath, getDriver, @@ -124,4 +125,27 @@ describe('Working with sprites', () => { const logs = await getLogs(); await expect(logs).toEqual([]); }); + + test('Use browser back button to close library', async () => { + await driver.get('https://www.google.com'); + await loadUri(uri); + await clickXpath('//button[@title="Try It"]'); + await clickText('Costumes'); + await clickXpath('//button[@aria-label="Choose a Sprite"]'); + const abbyElement = await findByText('Abby'); // Should show editor for new costume + await elementIsVisible(abbyElement); + await driver.navigate().back(); + try { + // should throw error because library is no longer visible + await elementIsVisible(abbyElement); + throw 'ShouldNotGetHere'; // eslint-disable-line no-throw-literal + } catch (e) { + expect(e.constructor.name).toEqual('StaleElementReferenceError'); + } + const costumesElement = await findByText('Costumes'); // Should show editor for new costume + await elementIsVisible(costumesElement); + const logs = await getLogs(); + await expect(logs).toEqual([]); + }); + });