diff --git a/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx b/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx index 3500b93b1f..785ce623ca 100644 --- a/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx +++ b/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx @@ -91,7 +91,7 @@ export const EmbeddedWorkbenchLoader: React.FunctionComponent = () => {
- + {!traceURLs.length &&
Select test to see the trace
} diff --git a/packages/trace-viewer/src/ui/inspectorTab.tsx b/packages/trace-viewer/src/ui/inspectorTab.tsx index c608cde21b..7b3a90b709 100644 --- a/packages/trace-viewer/src/ui/inspectorTab.tsx +++ b/packages/trace-viewer/src/ui/inspectorTab.tsx @@ -22,16 +22,15 @@ import * as React from 'react'; import './sourceTab.css'; export const InspectorTab: React.FunctionComponent<{ - showScreenshot: boolean, sdkLanguage: Language, setIsInspecting: (isInspecting: boolean) => void, highlightedLocator: string, setHighlightedLocator: (locator: string) => void, -}> = ({ showScreenshot, sdkLanguage, setIsInspecting, highlightedLocator, setHighlightedLocator }) => { +}> = ({ sdkLanguage, setIsInspecting, highlightedLocator, setHighlightedLocator }) => { return
Locator
- { + { // Updating text needs to go first - react can squeeze a render between the state updates. setHighlightedLocator(text); setIsInspecting(false); diff --git a/packages/trace-viewer/src/ui/modelUtil.ts b/packages/trace-viewer/src/ui/modelUtil.ts index b639a4c03d..8badcbd87e 100644 --- a/packages/trace-viewer/src/ui/modelUtil.ts +++ b/packages/trace-viewer/src/ui/modelUtil.ts @@ -22,7 +22,6 @@ import type { ActionEntry, ContextEntry, PageEntry } from '../types/entries'; import type { StackFrame } from '@protocol/channels'; const contextSymbol = Symbol('context'); -const pageSymbol = Symbol('page'); const nextInContextSymbol = Symbol('next'); const prevInListSymbol = Symbol('prev'); const eventsSymbol = Symbol('events'); @@ -148,7 +147,6 @@ function indexModel(context: ContextEntry) { for (let i = 0; i < context.actions.length; ++i) { const action = context.actions[i] as any; action[contextSymbol] = context; - action[pageSymbol] = context.pages.find(page => page.pageId === action.pageId); } let lastNonRouteAction = undefined; for (let i = context.actions.length - 1; i >= 0; i--) { @@ -353,10 +351,6 @@ export function prevInList(action: ActionTraceEvent): ActionTraceEvent { return (action as any)[prevInListSymbol]; } -export function pageForAction(action: ActionTraceEvent): PageEntry { - return (action as any)[pageSymbol]; -} - export function stats(action: ActionTraceEvent): { errors: number, warnings: number } { let errors = 0; let warnings = 0; diff --git a/packages/trace-viewer/src/ui/recorder/recorderView.tsx b/packages/trace-viewer/src/ui/recorder/recorderView.tsx index ed36efbbb6..6ff6b665d3 100644 --- a/packages/trace-viewer/src/ui/recorder/recorderView.tsx +++ b/packages/trace-viewer/src/ui/recorder/recorderView.tsx @@ -213,7 +213,6 @@ const PropertiesView: React.FunctionComponent<{ id: 'inspector', title: 'Locator', render: () => (items: T[], metric: (v: T) => number, target: number) { - return items.find((item, index) => { - if (index === items.length - 1) - return true; - const next = items[index + 1]; - return Math.abs(metric(item) - target) < Math.abs(metric(next) - target); - }); -} - export const SnapshotTabsView: React.FunctionComponent<{ action: ActionTraceEvent | undefined, model?: MultiTraceModel, @@ -53,7 +43,6 @@ export const SnapshotTabsView: React.FunctionComponent<{ openPage?: (url: string, target?: string) => Window | any, }> = ({ action, sdkLanguage, testIdAttributeName, isInspecting, setIsInspecting, highlightedLocator, setHighlightedLocator, openPage }) => { const [snapshotTab, setSnapshotTab] = React.useState<'action'|'before'|'after'>('action'); - const showScreenshotInsteadOfSnapshot = false; const snapshots = React.useMemo(() => { return collectSnapshots(action); @@ -65,7 +54,7 @@ export const SnapshotTabsView: React.FunctionComponent<{ return
- setIsInspecting(!isInspecting)} disabled={showScreenshotInsteadOfSnapshot} /> + setIsInspecting(!isInspecting)} /> {['action', 'before', 'after'].map(tab => { return ; })}
- { + { if (!openPage) openPage = window.open; const win = openPage(snapshotUrls?.popoutUrl || '', '_blank'); @@ -86,7 +75,7 @@ export const SnapshotTabsView: React.FunctionComponent<{ }); }} />
- {!showScreenshotInsteadOfSnapshot && } - {showScreenshotInsteadOfSnapshot && } + />
; }; @@ -194,38 +179,6 @@ export const SnapshotView: React.FunctionComponent<{
; }; -export const ScreenshotView: React.FunctionComponent<{ - action: ActionTraceEvent | undefined, - snapshotUrls: SnapshotUrls | undefined, - snapshot: Snapshot | undefined, -}> = ({ action, snapshotUrls, snapshot }) => { - const [snapshotInfo, setSnapshotInfo] = React.useState({ viewport: kDefaultViewport, url: '' }); - React.useEffect(() => { - fetchSnapshotInfo(snapshotUrls?.snapshotInfoUrl).then(setSnapshotInfo); - }, [snapshotUrls?.snapshotInfoUrl]); - - const page = action ? pageForAction(action) : undefined; - const screencastFrame = React.useMemo(() => { - if (snapshotInfo.wallTime && page?.screencastFrames[0]?.frameSwapWallTime) - return findClosest(page.screencastFrames, frame => frame.frameSwapWallTime!, snapshotInfo.wallTime); - - if (snapshotInfo.timestamp && page?.screencastFrames) - return findClosest(page.screencastFrames, frame => frame.timestamp, snapshotInfo.timestamp); - }, - [page?.screencastFrames, snapshotInfo.timestamp, snapshotInfo.wallTime]); - - const point = snapshot?.point; - - return - {screencastFrame && ( - <> - {point && } - {`Screenshot - - )} - ; -}; - const SnapshotWrapper: React.FunctionComponent> = ({ snapshotInfo, children }) => { diff --git a/packages/trace-viewer/src/ui/workbench.tsx b/packages/trace-viewer/src/ui/workbench.tsx index f5471ca81c..8e22917053 100644 --- a/packages/trace-viewer/src/ui/workbench.tsx +++ b/packages/trace-viewer/src/ui/workbench.tsx @@ -55,8 +55,7 @@ export const Workbench: React.FunctionComponent<{ openPage?: (url: string, target?: string) => Window | any, onOpenExternally?: (location: modelUtil.SourceLocation) => void, revealSource?: boolean, - showSettings?: boolean, -}> = ({ model, showSourcesFirst, rootDir, fallbackLocation, isLive, hideTimeline, status, annotations, inert, openPage, onOpenExternally, revealSource, showSettings }) => { +}> = ({ model, showSourcesFirst, rootDir, fallbackLocation, isLive, hideTimeline, status, annotations, inert, openPage, onOpenExternally, revealSource }) => { const [selectedCallId, setSelectedCallId] = React.useState(undefined); const [revealedError, setRevealedError] = React.useState(undefined); const [highlightedCallId, setHighlightedCallId] = React.useState(); @@ -68,7 +67,6 @@ export const Workbench: React.FunctionComponent<{ const [highlightedLocator, setHighlightedLocator] = React.useState(''); const [selectedTime, setSelectedTime] = React.useState(); const [sidebarLocation, setSidebarLocation] = useSetting<'bottom' | 'right'>('propertiesSidebarLocation', 'bottom'); - const showScreenshot = false; const setSelectedAction = React.useCallback((action: modelUtil.ActionTraceEventInContext | undefined) => { setSelectedCallId(action?.callId); @@ -164,7 +162,6 @@ export const Workbench: React.FunctionComponent<{ id: 'inspector', title: 'Locator', render: () =>
- + {fileForLocalModeError &&
Trace Viewer uses Service Workers to show traces. To view trace:
diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts index 0ae5716e2f..37666fc1c6 100644 --- a/tests/library/trace-viewer.spec.ts +++ b/tests/library/trace-viewer.spec.ts @@ -1422,24 +1422,6 @@ test('should serve css without content-type', async ({ page, runAndTrace, server await expect(snapshotFrame.locator('body')).toHaveCSS('background-color', 'rgb(255, 0, 0)', { timeout: 0 }); }); -test.skip('should allow showing screenshots instead of snapshots', async ({ runAndTrace, page, server }) => { - const traceViewer = await runAndTrace(async () => { - await page.goto(server.PREFIX + '/one-style.html'); - await page.waitForTimeout(1000); // ensure we could take a screenshot - }); - - const screenshot = traceViewer.page.getByAltText(`Screenshot of page.goto`); - const snapshot = (await traceViewer.snapshotFrame('page.goto')).owner(); - await expect(snapshot).toBeVisible(); - await expect(screenshot).not.toBeVisible(); - - await traceViewer.page.getByTitle('Settings').click(); - await traceViewer.page.getByText('Show screenshot instead of snapshot').setChecked(true); - - await expect(snapshot).not.toBeVisible(); - await expect(screenshot).toBeVisible(); -}); - test('canvas clipping', async ({ runAndTrace, page, server }) => { const traceViewer = await runAndTrace(async () => { await page.goto(server.PREFIX + '/screenshots/canvas.html#canvas-on-edge'); @@ -1466,18 +1448,6 @@ test('canvas clipping in iframe', async ({ runAndTrace, page, server }) => { await expect(canvas).toHaveAttribute('title', `Playwright displays canvas contents on a best-effort basis. It doesn't support canvas elements inside an iframe yet. If this impacts your workflow, please open an issue so we can prioritize.`); }); -test.skip('should handle case where neither snapshots nor screenshots exist', async ({ runAndTrace, page, server }) => { - const traceViewer = await runAndTrace(async () => { - await page.goto(server.PREFIX + '/one-style.html'); - }, { snapshots: false, screenshots: false }); - - await traceViewer.page.getByTitle('Settings').click(); - await traceViewer.page.getByText('Show screenshot instead of snapshot').setChecked(true); - - const screenshot = traceViewer.page.getByAltText(`Screenshot of page.goto > Action`); - await expect(screenshot).not.toBeVisible(); -}); - test('should show only one pointer with multilevel iframes', async ({ page, runAndTrace, server, browserName }) => { test.fixme(browserName === 'firefox', 'Elements in iframe are not marked');