diff --git a/desktop/src/components/browser/BrowserSurface.test.tsx b/desktop/src/components/browser/BrowserSurface.test.tsx index 96cbb058..ae4baa80 100644 --- a/desktop/src/components/browser/BrowserSurface.test.tsx +++ b/desktop/src/components/browser/BrowserSurface.test.tsx @@ -50,4 +50,15 @@ describe('BrowserSurface', () => { fireEvent.click(screen.getByLabelText('截图')) expect(bridge.eval).toHaveBeenCalledWith(expect.stringContaining('capture')) }) + + it('选择元素 button toggles pickerActive and signals the bridge', () => { + useBrowserPanelStore.getState().open('s1', 'http://localhost:5173/') + render() + fireEvent.click(screen.getByLabelText('选择元素')) + expect(useBrowserPanelStore.getState().bySession['s1']!.pickerActive).toBe(true) + expect(bridge.eval).toHaveBeenCalledWith(expect.stringContaining('enter-picker')) + fireEvent.click(screen.getByLabelText('选择元素')) + expect(useBrowserPanelStore.getState().bySession['s1']!.pickerActive).toBe(false) + expect(bridge.eval).toHaveBeenLastCalledWith(expect.stringContaining('exit-picker')) + }) }) diff --git a/desktop/src/components/browser/BrowserSurface.tsx b/desktop/src/components/browser/BrowserSurface.tsx index ff8645b9..ef55a1c9 100644 --- a/desktop/src/components/browser/BrowserSurface.tsx +++ b/desktop/src/components/browser/BrowserSurface.tsx @@ -1,5 +1,5 @@ import { useEffect, useLayoutEffect, useRef } from 'react' -import { Camera } from 'lucide-react' +import { Camera, MousePointer2 } from 'lucide-react' import { BrowserAddressBar } from './BrowserAddressBar' import { computeWebviewBounds } from './computeWebviewBounds' import { previewBridge } from '../../lib/previewBridge' @@ -65,6 +65,19 @@ export function BrowserSurface({ sessionId }: { sessionId: string }) { > +