diff --git a/frontend/app/components/Session_/UnitStepsModal/index.tsx b/frontend/app/components/Session_/UnitStepsModal/index.tsx index 93a0f96a2..033453d53 100644 --- a/frontend/app/components/Session_/UnitStepsModal/index.tsx +++ b/frontend/app/components/Session_/UnitStepsModal/index.tsx @@ -1,6 +1,6 @@ -import React from "react"; -import { TYPES, Input, Click, Location } from 'App/types/session/event' -import { CodeBlock, CopyButton } from "UI"; +import React from 'react'; +import { TYPES, Input, Click, Location } from 'App/types/session/event'; +import { CodeBlock, CopyButton } from 'UI'; import { Segmented } from 'antd'; interface Props { @@ -10,34 +10,62 @@ interface Props { } function UnitStepsModal({ events, width, height }: Props) { - const [eventStr, setEventStr] = React.useState('') - const [activeFramework, setActiveFramework] = React.useState('puppeteer') + const [eventStr, setEventStr] = React.useState(''); + const [activeFramework, setActiveFramework] = React.useState('puppeteer'); React.useEffect(() => { - const userEventTypes = [TYPES.LOCATION, TYPES.CLICK, TYPES.INPUT] + const userEventTypes = [TYPES.LOCATION, TYPES.CLICK, TYPES.INPUT]; const puppeteerEvents = { [TYPES.LOCATION]: (event: Location) => `await page.goto('${event.url}')`, - [TYPES.CLICK]: (event: Click) => `await page.locator('${event.selector.length ? event.selector : event.label}').click()`, - [TYPES.INPUT]: (event: Input) => `await page.locator('${event.label}').type('Test Input')`, - 'screen': () => `await page.setViewport({width: ${width}, height: ${height})` - } + [TYPES.CLICK]: (event: Click) => + `await page.locator('${ + event.selector.length ? event.selector : event.label + }').click()`, + [TYPES.INPUT]: (event: Input) => + `await page.locator('${event.label}').type('Test Input')`, + screen: () => + `await page.setViewport({width: ${width}, height: ${height})`, + }; const cypressEvents = { [TYPES.LOCATION]: (event: Location) => `cy.visit('${event.url}')`, - [TYPES.CLICK]: (event: Click) => `cy.get('${event.selector.length ? event.selector : event.label}').click()`, - [TYPES.INPUT]: (event: Input) => `cy.get('${event.label}').type('Test Input')`, - 'screen': () => `cy.viewport(${width}, ${height})` - } - const usedCollection = activeFramework === 'puppeteer' ? puppeteerEvents : cypressEvents + [TYPES.CLICK]: (event: Click) => + `cy.get('${ + event.selector.length ? event.selector : event.label + }').click()`, + [TYPES.INPUT]: (event: Input) => + `cy.get('${event.label}').type('Test Input')`, + screen: () => `cy.viewport(${width}, ${height})`, + }; + const playWrightEvents = { + [TYPES.LOCATION]: (event: Location) => `await page.goto('${event.url}')`, + [TYPES.CLICK]: (event: Click) => + event.selector.length + ? `await page.locator('${event.selector}').click()` + : `await page.getByText('${event.label}').click()`, + [TYPES.INPUT]: (event: Input) => + `await page.getByLabel('${event.label}').fill('Test Input')`, + screen: () => + `await page.setViewport({width: ${width}, height: ${height})`, + }; - let finalScript = '' + const collections = { + puppeteer: puppeteerEvents, + cypress: cypressEvents, + playwright: playWrightEvents, + } + + // @ts-ignore + const usedCollection = collections[activeFramework]; + + let finalScript = ''; events.forEach((ev) => { if (userEventTypes.includes(ev.type)) { - finalScript += usedCollection[ev.type](ev) - finalScript += '\n' + finalScript += usedCollection[ev.type](ev); + finalScript += '\n'; } - }) - setEventStr(finalScript) - }, [events, activeFramework]) + }); + setEventStr(finalScript); + }, [events, activeFramework]); return (