sus-fixtures-async-webdriver 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7384e4e769f3445e6f214faa5616684391824be5d669a1fdb068ce4a3fe80029
4
- data.tar.gz: bd8cfce3a18642f3ba33854937d0d125be63c2e5b7ac9d306f81892b2c7c9e7d
3
+ metadata.gz: 13796a43b11df5959aa1c2e61af561b337ab98395ac06755665c8c2b6f655af8
4
+ data.tar.gz: 36ad7b10080390c72879d81a3ba8f63cf232943889cf19fb05574c12b3f11bed
5
5
  SHA512:
6
- metadata.gz: 9907b3d1a4469b61841234948c28ecf4c54f13af22dc44f404e706e394f53d2d3bbd92c050b4201a616fa4e074c790c0b5340a3d59cf7fc56a1f52c8aee62de9
7
- data.tar.gz: 63c7d5f917dd9662eaf9d2288f5a9752008ee6ab679467bb8fbc82932a44d92668a8a3df73206894b0f6ff023f9ad3337df5bce5afae066da687b09b4dec8525
6
+ metadata.gz: c9487d809b255d6e6c12309c690a72c778d661602d0cc19e5186944cb6bfa5aebe87a524180765f6fd3055d20a45fd3a3e9566574c9d486e3e07427f466bbc35
7
+ data.tar.gz: 496f5c1e1d4c2c692d13ef976516c3df65968c53c07e404191418c8c9931f96faa330b9c20bdbb2ba98a4cefa9830e10c691170c6d06bd458ac8ee0b716328c9
checksums.yaml.gz.sig CHANGED
Binary file
@@ -0,0 +1,59 @@
1
+ # Getting Started
2
+
3
+ This guide is designed to help you get started with the `sus-fixtures-async-webdriver` gem.
4
+
5
+ ## Installation
6
+
7
+ Add the gem to your project:
8
+
9
+ ``` bash
10
+ $ bundle add sus-fixtures-async-webdriver
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ Simply add the appropriate fixtures to your integration tests:
16
+
17
+ ```ruby
18
+ require 'sus/fixtures/async/http/server_context'
19
+ require 'sus/fixtures/async/webdriver/session_context'
20
+
21
+ require 'protocol/rack/adapter'
22
+ require 'rack/builder'
23
+
24
+ describe "my website" do
25
+ include Sus::Fixtures::Async::HTTP::ServerContext
26
+ include Sus::Fixtures::Async::WebDriver::SessionContext
27
+
28
+ def middleware
29
+ Protocol::Rack::Adapter.new(app)
30
+ end
31
+
32
+ def app
33
+ Rack::Builder.load_file(File.expand_path('../config.ru', __dir__))
34
+ end
35
+
36
+ it "has a title" do
37
+ navigate_to('/')
38
+
39
+ expect(session.document_title).to be == "Example"
40
+ end
41
+ end
42
+ ```
43
+
44
+ See `examples/rack` for a full example.
45
+
46
+ ## Automatic Debugging
47
+
48
+ When tests fail, the `SessionContext` automatically captures debugging information to help you understand what went wrong:
49
+
50
+ - **HTML Source**: The current page DOM structure is saved to a timestamped `.html` file
51
+ - **Screenshot**: A visual screenshot of the page is saved to a timestamped `.png` file
52
+
53
+ Debug files are automatically saved to the `tmp/debug/` directory and named with the test class and timestamp (e.g., `tmp/debug/MyTestClass-20250923-143022.html`). When a test fails, you'll see output like:
54
+
55
+ ```
56
+ 🐛 Test failed, debug files captured: 📄 HTML: tmp/debug/MyTestClass-20250923-143022.html 📸 Screenshot: tmp/debug/MyTestClass-20250923-143022.png ❌ Error: NoSuchElementError: Element not found
57
+ ```
58
+
59
+ This debugging information is captured automatically without any additional setup - just include the `SessionContext` fixture and it will handle debug capture on test failures.
@@ -0,0 +1,13 @@
1
+ # Automatically generated context index for Utopia::Project guides.
2
+ # Do not edit then files in this directory directly, instead edit the guides and then run `bake utopia:project:agent:context:update`.
3
+ ---
4
+ description: A set of sus fixtures for writing integration tests.
5
+ metadata:
6
+ documentation_uri: https://socketry.github.io/sus-fixtures-async-webdriver/
7
+ funding_uri: https://github.com/sponsors/ioquatix/
8
+ source_code_uri: https://github.com/socketry/sus-fixtures-async-webdriver.git
9
+ files:
10
+ - path: getting-started.md
11
+ title: Getting Started
12
+ description: This guide is designed to help you get started with the `sus-fixtures-async-webdriver`
13
+ gem.
@@ -5,6 +5,7 @@
5
5
 
6
6
  require "async/webdriver"
7
7
  require "async/webdriver/bridge/pool"
8
+ require "fileutils"
8
9
 
9
10
  module Sus
10
11
  module Fixtures
@@ -46,6 +47,11 @@ module Sus
46
47
 
47
48
  def after(error = nil)
48
49
  if @session
50
+ # Capture debugging information if there was an error
51
+ if error
52
+ capture_debug_state(error)
53
+ end
54
+
49
55
  SessionContext.pool.reuse(@session)
50
56
  @session = nil
51
57
  end
@@ -53,6 +59,36 @@ module Sus
53
59
  super
54
60
  end
55
61
 
62
+ private
63
+
64
+ def capture_debug_state(error)
65
+ return unless @session
66
+
67
+ begin
68
+ # Create debug directory if it doesn't exist
69
+ debug_dir = "tmp/debug"
70
+ ::FileUtils.mkdir_p(debug_dir)
71
+
72
+ timestamp = Time.now.strftime("%Y%m%d-%H%M%S")
73
+ test_name = self.class.name&.gsub("::", "-") || "unknown-test"
74
+ prefix = "#{test_name}-#{timestamp}"
75
+
76
+ # Capture HTML source
77
+ html = @session.document_source
78
+ html_file = ::File.join(debug_dir, "#{prefix}.html")
79
+ ::File.write(html_file, html)
80
+
81
+ # Capture screenshot
82
+ screenshot_data = @session.screenshot
83
+ screenshot_file = ::File.join(debug_dir, "#{prefix}.png")
84
+ ::File.binwrite(screenshot_file, screenshot_data)
85
+
86
+ inform "🐛 Test failed, debug files captured: 📄 HTML: #{html_file} 📸 Screenshot: #{screenshot_file} ❌ Error: #{error.class.name}: #{error.message}"
87
+ rescue => debug_error
88
+ inform "⚠️ Failed to capture debug state: #{debug_error.class.name}: #{debug_error.message}"
89
+ end
90
+ end
91
+
56
92
  # Navigate to a specific path within the website.
57
93
  # @parameter path [String] The path to navigate to.
58
94
  def navigate_to(path)
@@ -7,7 +7,7 @@ module Sus
7
7
  module Fixtures
8
8
  module Async
9
9
  module WebDriver
10
- VERSION = "0.2.0"
10
+ VERSION = "0.3.0"
11
11
  end
12
12
  end
13
13
  end
data/readme.md CHANGED
@@ -10,6 +10,14 @@ Please see the [project documentation](https://socketry.github.io/sus-fixtures-a
10
10
 
11
11
  - [Getting Started](https://socketry.github.io/sus-fixtures-async-webdriver/guides/getting-started/index) - This guide is designed to help you get started with the `sus-fixtures-async-webdriver` gem.
12
12
 
13
+ ## Releases
14
+
15
+ Please see the [project releases](https://socketry.github.io/sus-fixtures-async-webdriver/releases/index) for all releases.
16
+
17
+ ### v0.3.0
18
+
19
+ - Dump screenshot and HTML of the browser session on test failure for easier debugging.
20
+
13
21
  ## See Also
14
22
 
15
23
  - [async-webdriver](https://github.com/socketry/async-webdriver) - Asynchronous WebDriver client used by this fixture.
data/releases.md ADDED
@@ -0,0 +1,5 @@
1
+ # Releases
2
+
3
+ ## v0.3.0
4
+
5
+ - Dump screenshot and HTML of the browser session on test failure for easier debugging.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,11 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sus-fixtures-async-webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain:
11
10
  - |
@@ -37,7 +36,7 @@ cert_chain:
37
36
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
38
37
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
39
38
  -----END CERTIFICATE-----
40
- date: 2024-09-20 00:00:00.000000000 Z
39
+ date: 1980-01-02 00:00:00.000000000 Z
41
40
  dependencies:
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: async-webdriver
@@ -45,24 +44,25 @@ dependencies:
45
44
  requirements:
46
45
  - - "~>"
47
46
  - !ruby/object:Gem::Version
48
- version: '0.3'
47
+ version: '0.9'
49
48
  type: :runtime
50
49
  prerelease: false
51
50
  version_requirements: !ruby/object:Gem::Requirement
52
51
  requirements:
53
52
  - - "~>"
54
53
  - !ruby/object:Gem::Version
55
- version: '0.3'
56
- description:
57
- email:
54
+ version: '0.9'
58
55
  executables: []
59
56
  extensions: []
60
57
  extra_rdoc_files: []
61
58
  files:
59
+ - context/getting-started.md
60
+ - context/index.yaml
62
61
  - lib/sus/fixtures/async/webdriver/session_context.rb
63
62
  - lib/sus/fixtures/async/webdriver/version.rb
64
63
  - license.md
65
64
  - readme.md
65
+ - releases.md
66
66
  homepage: https://github.com/socketry/sus-fixtures-async-webdriver
67
67
  licenses:
68
68
  - MIT
@@ -70,7 +70,6 @@ metadata:
70
70
  documentation_uri: https://socketry.github.io/sus-fixtures-async-webdriver/
71
71
  funding_uri: https://github.com/sponsors/ioquatix/
72
72
  source_code_uri: https://github.com/socketry/sus-fixtures-async-webdriver.git
73
- post_install_message:
74
73
  rdoc_options: []
75
74
  require_paths:
76
75
  - lib
@@ -78,15 +77,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
77
  requirements:
79
78
  - - ">="
80
79
  - !ruby/object:Gem::Version
81
- version: '3.1'
80
+ version: '3.2'
82
81
  required_rubygems_version: !ruby/object:Gem::Requirement
83
82
  requirements:
84
83
  - - ">="
85
84
  - !ruby/object:Gem::Version
86
85
  version: '0'
87
86
  requirements: []
88
- rubygems_version: 3.5.11
89
- signing_key:
87
+ rubygems_version: 3.6.9
90
88
  specification_version: 4
91
89
  summary: A set of sus fixtures for writing integration tests.
92
90
  test_files: []
metadata.gz.sig CHANGED
Binary file