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 }) {
>
+