diff --git a/claudetool/browse/browse.go b/claudetool/browse/browse.go
index 9ab1ae3..bebf88c 100644
--- a/claudetool/browse/browse.go
+++ b/claudetool/browse/browse.go
@@ -75,10 +75,15 @@
 		// when running in a container, even when we aren't root (which is largely
 		// the case for tests).
 		opts = append(opts, chromedp.NoSandbox)
+		// Setting 'DBUS_SESSION_BUS_ADDRESS=""' or this flag allows tests to pass
+		// in GitHub runner contexts. It's a mystery why the failure isn't clear when this fails.
+		opts = append(opts, chromedp.Flag("--disable-dbus", true))
+		// This can be pretty slow in tests
+		opts = append(opts, chromedp.WSURLReadTimeout(30*time.Second))
 		allocCtx, _ := chromedp.NewExecAllocator(b.ctx, opts...)
 		browserCtx, browserCancel := chromedp.NewContext(
 			allocCtx,
-			chromedp.WithLogf(log.Printf),
+			chromedp.WithLogf(log.Printf), chromedp.WithErrorf(log.Printf), chromedp.WithBrowserOption(chromedp.WithDialTimeout(30*time.Second)),
 		)
 
 		b.browserCtx = browserCtx
diff --git a/claudetool/browse/browse_test.go b/claudetool/browse/browse_test.go
index 6a0a31d..d4c6b1e 100644
--- a/claudetool/browse/browse_test.go
+++ b/claudetool/browse/browse_test.go
@@ -18,6 +18,9 @@
 func TestToolCreation(t *testing.T) {
 	// Create browser tools instance
 	tools := NewBrowseTools(context.Background())
+	t.Cleanup(func() {
+		tools.Close()
+	})
 
 	// Test each tool has correct name and description
 	toolTests := []struct {
@@ -68,6 +71,9 @@
 func TestGetTools(t *testing.T) {
 	// Create browser tools instance
 	tools := NewBrowseTools(context.Background())
+	t.Cleanup(func() {
+		tools.Close()
+	})
 
 	// Test with screenshot tools included
 	t.Run("with screenshots", func(t *testing.T) {
@@ -102,10 +108,13 @@
 	}
 
 	// Create browser tools instance
-	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
 	defer cancel()
 
 	tools := NewBrowseTools(ctx)
+	t.Cleanup(func() {
+		tools.Close()
+	})
 
 	// Initialize the browser
 	err := tools.Initialize()
@@ -118,9 +127,6 @@
 		}
 	}
 
-	// Clean up
-	defer tools.Close()
-
 	// Get browser context to verify it's working
 	browserCtx, err := tools.GetBrowserContext()
 	if err != nil {
@@ -148,11 +154,13 @@
 	}
 
 	// Create browser tools instance
-	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
 	defer cancel()
 
 	tools := NewBrowseTools(ctx)
-	defer tools.Close()
+	t.Cleanup(func() {
+		tools.Close()
+	})
 
 	// Check if browser initialization works
 	if err := tools.Initialize(); err != nil {
@@ -222,6 +230,9 @@
 	// Create browser tools instance
 	ctx := context.Background()
 	tools := NewBrowseTools(ctx)
+	t.Cleanup(func() {
+		tools.Close()
+	})
 
 	// Test SaveScreenshot function directly
 	testData := []byte("test image data")
@@ -256,6 +267,9 @@
 	// Create a test BrowseTools instance
 	ctx := context.Background()
 	browseTools := NewBrowseTools(ctx)
+	t.Cleanup(func() {
+		browseTools.Close()
+	})
 
 	// Create a test image
 	testDir := t.TempDir()
@@ -308,7 +322,7 @@
 
 // TestDefaultViewportSize verifies that the browser starts with the correct default viewport size
 func TestDefaultViewportSize(t *testing.T) {
-	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
 	defer cancel()
 
 	// Skip if CI or headless testing environment
@@ -317,7 +331,9 @@
 	}
 
 	tools := NewBrowseTools(ctx)
-	defer tools.Close()
+	t.Cleanup(func() {
+		tools.Close()
+	})
 
 	// Initialize browser (which should set default viewport to 1280x720)
 	err := tools.Initialize()
@@ -375,7 +391,7 @@
 
 // TestResizeTool tests the browser resize functionality
 func TestResizeTool(t *testing.T) {
-	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
 	defer cancel()
 
 	// Skip if CI or headless testing environment
@@ -385,7 +401,9 @@
 
 	t.Run("ResizeWindow", func(t *testing.T) {
 		tools := NewBrowseTools(ctx)
-		defer tools.Close()
+		t.Cleanup(func() {
+			tools.Close()
+		})
 
 		// Resize to mobile dimensions
 		resizeTool := tools.NewResizeTool()
