Skip to content

Commit 19ab474

Browse files
feat: all operations via CDP — screenshot, DOM, evaluate, click, fill
- Screenshot via CDP Page.captureScreenshot (returns base64 PNG) - DOM snapshot via CDP Accessibility.getFullAXTree with fallback - JavaScript evaluate via CDP Runtime.evaluate - Click via CDP Runtime.evaluate (querySelector.click()) - Fill via CDP Runtime.evaluate (focus + value + events) - CUA click/type/keypress/scroll via CDP Input.dispatch* - DOM CUA click via CDP DOM.getBoxModel + coordinate click - GetVisibleDOM via CDP Runtime.evaluate (walk DOM tree) - Removed executeUnhandledCommand dependency (broken on extension pipe) - Full end-to-end test: create→navigate→screenshot→snapshot→evaluate→close
1 parent 250e802 commit 19ab474

3 files changed

Lines changed: 250 additions & 126 deletions

File tree

bridge.exe

7 KB
Binary file not shown.

cmd/test/main.go

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"encoding/json"
45
"fmt"
56
"log"
67
"os"
@@ -19,41 +20,76 @@ func main() {
1920
}
2021
defer c.Close()
2122

22-
// 1. Get backend info
23-
info, err := c.GetInfo()
24-
if err != nil {
25-
fmt.Printf("GetInfo error: %v\n", err)
26-
} else {
27-
fmt.Printf("Backend: %s\n", string(info))
28-
}
29-
30-
// 2. Create a new tab
23+
// 1. Create tab
3124
tabID, err := c.CreateTab()
3225
if err != nil {
33-
fmt.Printf("CreateTab error: %v\n", err)
26+
fmt.Printf("FAIL createTab: %v\n", err)
3427
os.Exit(1)
3528
}
36-
fmt.Printf("Created tab: %s\n", tabID)
29+
fmt.Printf("OK createTab: %s\n", tabID)
3730

38-
// 3. Navigate the tab
31+
// 2. Navigate
3932
err = c.Navigate(tabID, "https://example.com")
4033
if err != nil {
41-
fmt.Printf("Navigate error: %v\n", err)
34+
fmt.Printf("FAIL navigate: %v\n", err)
4235
} else {
43-
fmt.Printf("Navigated tab %s to https://example.com\n", tabID)
36+
fmt.Printf("OK navigate\n")
4437
}
4538

46-
// 4. Wait for page load
39+
// 3. Wait for load
4740
time.Sleep(2 * time.Second)
4841

49-
// 5. List tabs to verify
42+
// 4. List tabs
5043
tabs, err := c.ListTabs()
5144
if err != nil {
52-
fmt.Printf("ListTabs error: %v\n", err)
45+
fmt.Printf("FAIL listTabs: %v\n", err)
5346
} else {
54-
fmt.Printf("Tabs:\n")
5547
for _, t := range tabs {
56-
fmt.Printf(" [%s] %s — %s\n", t.ID, t.Title, t.URL)
48+
fmt.Printf("OK tab: [%s] %s — %s\n", t.ID, t.Title, t.URL)
5749
}
5850
}
51+
52+
// 5. Screenshot
53+
b64, err := c.Screenshot(tabID, false)
54+
if err != nil {
55+
fmt.Printf("FAIL screenshot: %v\n", err)
56+
} else {
57+
fmt.Printf("OK screenshot: %d bytes base64\n", len(b64))
58+
}
59+
60+
// 6. DOM snapshot
61+
snap, err := c.DOMSnapshot(tabID)
62+
if err != nil {
63+
fmt.Printf("FAIL domSnapshot: %v\n", err)
64+
} else {
65+
if len(snap) > 200 {
66+
snap = snap[:200] + "..."
67+
}
68+
fmt.Printf("OK domSnapshot: %s\n", snap)
69+
}
70+
71+
// 7. Evaluate JS
72+
raw, err := c.Evaluate(tabID, "document.title")
73+
if err != nil {
74+
fmt.Printf("FAIL evaluate: %v\n", err)
75+
} else {
76+
var result struct {
77+
Result struct {
78+
Value string `json:"value"`
79+
} `json:"result"`
80+
}
81+
if json.Unmarshal(raw, &result) == nil {
82+
fmt.Printf("OK evaluate: document.title = %q\n", result.Result.Value)
83+
} else {
84+
fmt.Printf("OK evaluate: %s\n", string(raw)[:100])
85+
}
86+
}
87+
88+
// 8. Close tab
89+
err = c.CloseTab(tabID)
90+
if err != nil {
91+
fmt.Printf("FAIL closeTab: %v\n", err)
92+
} else {
93+
fmt.Printf("OK closeTab\n")
94+
}
5995
}

0 commit comments

Comments
 (0)