packages/screenshots/testplane/actions.js (48 lines of code) (raw):

const TIMEOUT = 1000; module.exports = { async capture(browser, {name, selector}) { const selectors = Array.isArray(selector) ? selector : [selector]; await Promise.all( selectors.map(async selectorString => { const element = await browser.$(selectorString); return element.waitForDisplayed({timeout: TIMEOUT}); }), ); await browser.assertView(name.toLowerCase(), selector); }, click: async (browser, {selector}) => { const element = await browser.$(selector); return element.click(); }, executeJS: (browser, {script}) => browser.execute(script), focus: (browser, {selector}) => browser.execute(`document.querySelector('${selector}').focus()`), mouseMove: async (browser, {selector, x, y}) => { const element = await browser.$(selector); return element.moveTo({xOffset: x, yOffset: y}); }, mouseEvent: (browser, {selector, eventname}) => browser.execute(`document.querySelector('${selector}').dispatchEvent(new MouseEvent('${eventname}'))`), sendKeys: async (browser, {selector, value}) => { const element = await browser.$(selector); return element.addValue(value); }, scroll: (browser, {selector, x, y}) => browser.execute( `var element = document.querySelector('${selector}'); ${y && `element.scrollTop += ${y};`} ${x && `element.scrollLeft += ${x};`}`, ), setWindowSize: (browser, {width, height}) => browser.setWindowSize(width, height), waitForElementToShow: async (browser, {timeout, selector, hidden}) => { const element = await browser.$(selector); return element.waitForDisplayed({timeout, reverse: hidden}); }, waitForJSCondition: (browser, {condition}) => browser.waitUntil(() => browser.execute(condition)), wait: (_, {delay}) => new Promise(resolve => setTimeout(resolve, delay)), setDarkTheme: browser => browser.execute(() => { document.documentElement.classList.add('ring-ui-theme-dark'); document.body.classList.add('ring-ui-theme-dark'); // To trigger force theme update, see `.storybook/theme-decorator.tsx` window.dispatchEvent(new CustomEvent('FORCE_THEME_DARK_SET_EVENT')); }), };