diff --git a/internal/cmd/page.go b/internal/cmd/page.go index afa998b..79d0a97 100644 --- a/internal/cmd/page.go +++ b/internal/cmd/page.go @@ -786,9 +786,6 @@ func init() { pageUploadCmd.Flags().StringVar(&pageUploadFile, "file", "", "Path to the file to upload (required)") _ = pageUploadCmd.MarkFlagRequired("file") - // observe flags - pageObserveCmd.Flags().StringVar(&sessionObserveURL, "url", "", "Navigate to URL before observing") - // scrape flags pageScrapeCmd.Flags().StringVar(&sessionScrapeInstructions, "instructions", "", "Extraction instructions") pageScrapeCmd.Flags().BoolVar(&sessionScrapeOnlyMain, "only-main-content", false, "Only scrape main content") diff --git a/internal/cmd/page_test.go b/internal/cmd/page_test.go index dedf1b0..bd0011f 100644 --- a/internal/cmd/page_test.go +++ b/internal/cmd/page_test.go @@ -625,29 +625,6 @@ func TestRunPageObserve(t *testing.T) { } } -func TestRunPageObserve_WithURL(t *testing.T) { - server := setupPageTest(t) - server.AddResponse("/sessions/"+pageSessionIDTest+"/page/observe", 200, pageObserveResponse()) - - origURL := sessionObserveURL - sessionObserveURL = "https://example.com" - t.Cleanup(func() { sessionObserveURL = origURL }) - - cmd := &cobra.Command{} - cmd.SetContext(context.Background()) - - stdout, _ := testutil.CaptureOutput(func() { - err := runSessionObserve(cmd, []string{}) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - }) - - if stdout == "" { - t.Error("expected output, got empty string") - } -} - // Other Actions Tests func TestRunPageCaptchaSolve(t *testing.T) { diff --git a/internal/cmd/sessions.go b/internal/cmd/sessions.go index 19ae1f5..27b7e1e 100644 --- a/internal/cmd/sessions.go +++ b/internal/cmd/sessions.go @@ -22,7 +22,6 @@ var sessionsStartProxies bool var ( sessionID string - sessionObserveURL string sessionExecuteAction string sessionScrapeInstructions string sessionScrapeOnlyMain bool @@ -294,8 +293,6 @@ func init() { // Observe command flags sessionsObserveCmd.Flags().StringVar(&sessionID, "session-id", "", "Session ID (uses current session if not specified)") - sessionsObserveCmd.Flags().StringVar(&sessionObserveURL, "url", "", "Navigate to URL before observing") - // Execute command flags sessionsExecuteCmd.Flags().StringVar(&sessionID, "session-id", "", "Session ID (uses current session if not specified)") sessionsExecuteCmd.Flags().StringVar(&sessionExecuteAction, "action", "", "Action JSON, @file, or '-' for stdin") @@ -545,9 +542,6 @@ func runSessionObserve(cmd *cobra.Command, args []string) error { defer cancel() body := api.PageObserveJSONRequestBody{} - if sessionObserveURL != "" { - body.Url = &sessionObserveURL - } params := &api.PageObserveParams{} resp, err := client.Client().PageObserveWithResponse(ctx, sessionID, params, body) diff --git a/internal/cmd/sessions_test.go b/internal/cmd/sessions_test.go index 5b8e993..41d4b16 100644 --- a/internal/cmd/sessions_test.go +++ b/internal/cmd/sessions_test.go @@ -322,38 +322,6 @@ func TestRunSessionObserve(t *testing.T) { observeResp := fmt.Sprintf(`{"metadata":{"tabs":[{"tab_id":1,"title":"Tab","url":"https://example.com"}],"title":"Tab","url":"https://example.com"},"screenshot":{"raw":"aGVsbG8="},"session":%s,"space":{"category":"page","description":"desc","interaction_actions":[]}}`, sessionJSON()) server.AddResponse("/sessions/"+sessionIDTest+"/page/observe", 200, observeResp) - origURL := sessionObserveURL - sessionObserveURL = "https://example.com" - t.Cleanup(func() { sessionObserveURL = origURL }) - - origFormat := outputFormat - outputFormat = "json" - t.Cleanup(func() { outputFormat = origFormat }) - - cmd := &cobra.Command{} - cmd.SetContext(context.Background()) - - stdout, _ := testutil.CaptureOutput(func() { - err := runSessionObserve(cmd, nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - }) - - if stdout == "" { - t.Error("expected output, got empty string") - } -} - -func TestRunSessionObserve_NoURL(t *testing.T) { - server := setupSessionTest(t) - observeResp := fmt.Sprintf(`{"metadata":{"tabs":[{"tab_id":1,"title":"Tab","url":"https://example.com"}],"title":"Tab","url":"https://example.com"},"screenshot":{"raw":"aGVsbG8="},"session":%s,"space":{"category":"page","description":"desc","interaction_actions":[]}}`, sessionJSON()) - server.AddResponse("/sessions/"+sessionIDTest+"/page/observe", 200, observeResp) - - origURL := sessionObserveURL - sessionObserveURL = "" - t.Cleanup(func() { sessionObserveURL = origURL }) - origFormat := outputFormat outputFormat = "json" t.Cleanup(func() { outputFormat = origFormat }) diff --git a/skills/notte-browser/SKILL.md b/skills/notte-browser/SKILL.md index a066359..c6637e2 100644 --- a/skills/notte-browser/SKILL.md +++ b/skills/notte-browser/SKILL.md @@ -154,7 +154,7 @@ notte page close-tab **Page State:** ```bash # Observe page state and available actions -notte page observe [--url ] +notte page observe # Save a screenshot in tmp folder notte page screenshot diff --git a/tests/integration/page_test.go b/tests/integration/page_test.go index 06be84d..13aee40 100644 --- a/tests/integration/page_test.go +++ b/tests/integration/page_test.go @@ -25,8 +25,12 @@ func TestPageObserve(t *testing.T) { // Wait for session to be ready time.Sleep(2 * time.Second) - // Observe a page - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + // Navigate to the page first + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + // Observe the page + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) // Verify we got some observation data @@ -54,7 +58,10 @@ func TestPageExecuteAction(t *testing.T) { time.Sleep(2 * time.Second) // First navigate to a page - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) // Execute a simple goto action @@ -82,7 +89,10 @@ func TestPageScrapeBasic(t *testing.T) { time.Sleep(2 * time.Second) // Navigate to a page - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) // Scrape the page @@ -114,7 +124,10 @@ func TestPageScrapeWithInstructions(t *testing.T) { time.Sleep(2 * time.Second) // Navigate to a page - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) // Scrape with specific instructions @@ -141,7 +154,10 @@ func TestPageScrapeOnlyMainContent(t *testing.T) { time.Sleep(2 * time.Second) // Navigate to a page - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) // Scrape only main content @@ -167,8 +183,12 @@ func TestPageObserveExecuteScrapeFlow(t *testing.T) { // Wait for session to be ready time.Sleep(2 * time.Second) - // Step 1: Observe initial page - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + // Step 1: Navigate to initial page + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + // Step 1b: Observe initial page + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) t.Log("Step 1: Observed initial page") diff --git a/tests/integration/sessions_test.go b/tests/integration/sessions_test.go index 45d083b..ffe6186 100644 --- a/tests/integration/sessions_test.go +++ b/tests/integration/sessions_test.go @@ -112,8 +112,12 @@ func TestSessionsObserve(t *testing.T) { // Wait a moment for the session to be fully ready time.Sleep(2 * time.Second) - // Observe the page (navigate to a URL) - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + // Navigate to a URL + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + // Observe the page + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) t.Log("Successfully observed page") } @@ -136,7 +140,10 @@ func TestSessionsScrape(t *testing.T) { time.Sleep(2 * time.Second) // First navigate to a page - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) // Scrape the page content @@ -163,7 +170,10 @@ func TestSessionsNetwork(t *testing.T) { time.Sleep(2 * time.Second) // Navigate to generate some network activity - result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID, "--url", "https://example.com") + result = runCLIWithTimeout(t, 120*time.Second, "page", "goto", "https://example.com", "--session-id", sessionID) + requireSuccess(t, result) + + result = runCLIWithTimeout(t, 120*time.Second, "sessions", "observe", "--session-id", sessionID) requireSuccess(t, result) // Get network logs