browserctl 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/README.md +97 -55
  4. data/bin/browserctl +117 -108
  5. data/bin/browserd +9 -3
  6. data/bin/setup +7 -3
  7. data/examples/cloudflare_hitl.rb +6 -6
  8. data/examples/smoke/params_file.rb +3 -2
  9. data/examples/smoke/store_fetch.rb +5 -5
  10. data/examples/test_automation_practices/checkboxes.rb +39 -0
  11. data/examples/test_automation_practices/dynamic_elements.rb +40 -0
  12. data/examples/test_automation_practices/key_press.rb +41 -0
  13. data/examples/test_automation_practices/login.rb +34 -0
  14. data/examples/test_automation_practices/login_negative.rb +28 -0
  15. data/examples/test_automation_practices/notifications.rb +57 -0
  16. data/examples/the_internet/add_remove_elements.rb +1 -1
  17. data/examples/the_internet/checkboxes.rb +1 -1
  18. data/examples/the_internet/dropdown.rb +1 -1
  19. data/examples/the_internet/dynamic_loading.rb +2 -2
  20. data/examples/the_internet/login.rb +1 -1
  21. data/lib/browserctl/client.rb +112 -28
  22. data/lib/browserctl/commands/cookie.rb +59 -0
  23. data/lib/browserctl/commands/daemon.rb +77 -0
  24. data/lib/browserctl/commands/page.rb +47 -0
  25. data/lib/browserctl/commands/record.rb +1 -1
  26. data/lib/browserctl/commands/screenshot.rb +2 -2
  27. data/lib/browserctl/commands/session.rb +69 -0
  28. data/lib/browserctl/commands/snapshot.rb +5 -5
  29. data/lib/browserctl/commands/storage.rb +67 -0
  30. data/lib/browserctl/commands/workflow.rb +64 -0
  31. data/lib/browserctl/constants.rb +20 -1
  32. data/lib/browserctl/detectors.rb +23 -0
  33. data/lib/browserctl/errors.rb +25 -0
  34. data/lib/browserctl/logger.rb +4 -4
  35. data/lib/browserctl/policy.rb +36 -0
  36. data/lib/browserctl/recording.rb +4 -4
  37. data/lib/browserctl/runner.rb +4 -4
  38. data/lib/browserctl/server/command_dispatcher.rb +49 -258
  39. data/lib/browserctl/server/handlers/cookies.rb +57 -0
  40. data/lib/browserctl/server/handlers/daemon_control.rb +29 -0
  41. data/lib/browserctl/server/handlers/devtools.rb +22 -0
  42. data/lib/browserctl/server/handlers/hitl.rb +31 -0
  43. data/lib/browserctl/server/handlers/navigation.rb +94 -0
  44. data/lib/browserctl/server/handlers/observation.rb +87 -0
  45. data/lib/browserctl/server/handlers/page_lifecycle.rb +36 -0
  46. data/lib/browserctl/server/handlers/session.rb +93 -0
  47. data/lib/browserctl/server/handlers/storage.rb +109 -0
  48. data/lib/browserctl/server.rb +4 -3
  49. data/lib/browserctl/session.rb +79 -0
  50. data/lib/browserctl/version.rb +1 -1
  51. data/lib/browserctl/workflow.rb +58 -17
  52. data/lib/browserctl.rb +12 -2
  53. metadata +43 -11
  54. data/lib/browserctl/commands/export_cookies.rb +0 -18
  55. data/lib/browserctl/commands/import_cookies.rb +0 -23
  56. data/lib/browserctl/commands/inspect.rb +0 -21
  57. data/lib/browserctl/commands/open_page.rb +0 -21
  58. data/lib/browserctl/commands/pause.rb +0 -22
  59. data/lib/browserctl/commands/status.rb +0 -30
  60. data/lib/browserctl/commands/watch.rb +0 -27
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "optimist"
4
- require_relative "cli_output"
5
-
6
- module Browserctl
7
- module Commands
8
- class OpenPage
9
- extend CliOutput
10
-
11
- def self.run(client, args)
12
- opts = Optimist.options(args) do
13
- banner "Usage: browserctl open <page> [--url URL]"
14
- opt :url, "URL to navigate to", type: :string, short: "-u"
15
- end
16
- name = args.shift or abort "usage: browserctl open <page> [--url URL]"
17
- print_result(client.open_page(name, url: opts[:url]))
18
- end
19
- end
20
- end
21
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "cli_output"
4
-
5
- module Browserctl
6
- module Commands
7
- module Pause
8
- extend CliOutput
9
-
10
- def self.run(client, args)
11
- name = args.shift or abort "usage: browserctl pause <page>"
12
- res = client.pause(name)
13
- if res[:error]
14
- warn "Error: #{res[:error]}"
15
- exit 1
16
- end
17
- puts "Page '#{name}' paused. Browser is live — interact freely."
18
- puts "When done: browserctl resume #{name}"
19
- end
20
- end
21
- end
22
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
-
5
- module Browserctl
6
- module Commands
7
- module Status
8
- def self.run(client)
9
- ping = client.ping
10
- pages = client.list_pages[:pages] || []
11
- page_info = pages.map do |name|
12
- url_res = client.url(name)
13
- { name: name, url: url_res[:url] || url_res[:error] }
14
- end
15
-
16
- puts JSON.pretty_generate(
17
- daemon: "online",
18
- pid: ping[:pid],
19
- protocol_version: ping[:protocol_version],
20
- pages: page_info
21
- )
22
- rescue RuntimeError => e
23
- raise unless e.message.include?("browserd is not running")
24
-
25
- puts JSON.pretty_generate(daemon: "offline", error: e.message)
26
- exit 1
27
- end
28
- end
29
- end
30
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "optimist"
4
- require_relative "cli_output"
5
-
6
- module Browserctl
7
- module Commands
8
- class Watch
9
- extend CliOutput
10
-
11
- def self.run(client, args)
12
- opts = Optimist.options(args) do
13
- banner "Usage: browserctl watch <page> <selector> [--timeout N]"
14
- opt :timeout, "Seconds to wait (default: 30)", default: 30.0, short: "-t"
15
- end
16
- name = args.shift
17
- selector = args.shift
18
- abort "usage: browserctl watch <page> <selector> [--timeout N]" unless name && selector
19
- unless opts[:timeout].positive?
20
- warn "Error: --timeout must be a positive number"
21
- exit 1
22
- end
23
- print_result(client.watch(name, selector, timeout: opts[:timeout]))
24
- end
25
- end
26
- end
27
- end