async-webdriver 0.6.0 → 0.8.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: bf43f03c5d84881a589b4b8ada0b4b610bd81d7434b42387986c2e62be565748
4
- data.tar.gz: eeeda998354a547586c84f796a74062304510e3778011d18e60bead39ffb9d63
3
+ metadata.gz: 5c3dae5c334d2b97f044519b5c4235c104148fadcac0e95f25764551197a889c
4
+ data.tar.gz: b843c0e5eca27f7382d9d972fdce259051607c844600eea887a82e4a81d5e167
5
5
  SHA512:
6
- metadata.gz: 061ec510b866722f3893e549153532e8053a8aa4301316b338fec0bdd0785d00e7b84257969bfd2622581aecedaf59dd08f375577f051fc64c51ab4411b9fbe0
7
- data.tar.gz: 73ef488209fcdff4efb657b3c47b61459de197e9303790ed59356e05c6f7553155971b225d2271987da64e7336d5343aa5de4882bf0610c6d435cad369860c86
6
+ metadata.gz: 39488968a35e04975b8f1bfe8d2287dac5811f4a6e32db4a52dc14c835d43b0b502285d0e88f7925f1b0776610ec3011901a575dee56af5755101fface01d44c
7
+ data.tar.gz: '082e3d764d278351a50cf7bc969d586a94ee26a0066314f9de3577189dd752cb54eb0eaecc8fe1d9b4aadef1627c0df6b8eb7829702aa9cbc7e8a27b2281944b'
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023-2024, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'generic'
7
- require_relative 'process_group'
6
+ require_relative "generic"
7
+ require_relative "process_group"
8
8
 
9
9
  module Async
10
10
  module WebDriver
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023-2024, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'generic'
7
- require_relative 'process_group'
6
+ require_relative "generic"
7
+ require_relative "process_group"
8
8
 
9
9
  module Async
10
10
  module WebDriver
@@ -1,21 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023-2024, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require 'socket'
7
- require 'async/http/endpoint'
8
- require 'async/http/client'
6
+ require "socket"
7
+ require "async/http/endpoint"
8
+ require "async/http/client"
9
9
 
10
10
  module Async
11
11
  module WebDriver
12
12
  module Bridge
13
13
  # Generic W3C WebDriver implementation.
14
14
  class Generic
15
- def self.start(**options)
16
- self.new(**options).start
17
- end
18
-
19
15
  def initialize(**options)
20
16
  @options = options
21
17
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require 'async/actor'
7
- require 'async/pool'
6
+ require "async/actor"
7
+ require "async/pool"
8
8
 
9
- require_relative '../session'
9
+ require_relative "../session"
10
10
 
11
11
  module Async
12
12
  module WebDriver
@@ -15,8 +15,10 @@ module Async
15
15
  #
16
16
  # ``` ruby
17
17
  # begin
18
- # bridge = Async::WebDriver::Bridge::Pool.start(Async::WebDriver::Bridge::Chrome.new)
18
+ # bridge = Async::WebDriver::Bridge::Pool.new(Async::WebDriver::Bridge::Chrome.new)
19
19
  # session = bridge.session
20
+ # # ...
21
+ # session.close
20
22
  # ensure
21
23
  # bridge&.close
22
24
  # end
@@ -69,6 +71,11 @@ module Async
69
71
  def acquire
70
72
  if @sessions.empty?
71
73
  session = @client.post("session", {capabilities: @capabilities})
74
+
75
+ if session.nil?
76
+ raise Async::WebDriver::Error, "Failed to create session with capabilities: #{@capabilities.inspect}"
77
+ end
78
+
72
79
  session[:cache] = self
73
80
  session[:endpoint] = @driver.endpoint
74
81
 
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'driver'
6
+ require_relative "driver"
7
7
 
8
8
  module Async
9
9
  module WebDriver
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023-2024, by Samuel Williams.
4
+ # Copyright, 2024-2025, by Samuel Williams.
5
5
 
6
- require_relative 'generic'
7
- require_relative 'process_group'
6
+ require_relative "generic"
7
+ require_relative "process_group"
8
8
 
9
9
  module Async
10
10
  module WebDriver
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023-2024, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'bridge/chrome'
7
- require_relative 'bridge/firefox'
8
- require_relative 'bridge/safari'
6
+ require_relative "bridge/chrome"
7
+ require_relative "bridge/firefox"
8
+ require_relative "bridge/safari"
9
9
 
10
- require_relative 'error'
10
+ require_relative "error"
11
11
 
12
12
  module Async
13
13
  module WebDriver
@@ -36,14 +36,14 @@ module Async
36
36
  # ASYNC_WEBDRIVER_BRIDGE=Chrome
37
37
  # ASYNC_WEBDRIVER_BRIDGE=Firefox
38
38
  # ```
39
- ASYNC_WEBDRIVER_BRIDGE = 'ASYNC_WEBDRIVER_BRIDGE'
39
+ ASYNC_WEBDRIVER_BRIDGE = "ASYNC_WEBDRIVER_BRIDGE"
40
40
 
41
41
  # The environment variable used to disable headless mode.
42
42
  #
43
43
  # ```
44
44
  # ASYNC_WEBDRIVER_BRIDGE_HEADLESS=false
45
45
  # ```
46
- ASYNC_WEBDRIVER_BRIDGE_HEADLESS = 'ASYNC_WEBDRIVER_BRIDGE_HEADLESS'
46
+ ASYNC_WEBDRIVER_BRIDGE_HEADLESS = "ASYNC_WEBDRIVER_BRIDGE_HEADLESS"
47
47
 
48
48
  class UnsupportedError < Error
49
49
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'request_helper'
7
- require_relative 'session'
6
+ require_relative "request_helper"
7
+ require_relative "session"
8
8
 
9
9
  module Async
10
10
  module WebDriver
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'request_helper'
6
+ require_relative "request_helper"
7
7
 
8
- require_relative 'scope'
8
+ require_relative "scope"
9
9
 
10
10
  module Async
11
11
  module WebDriver
@@ -211,9 +211,9 @@ module Async
211
211
  # element.tagName
212
212
  # ```
213
213
  #
214
- # @returns [String] The tag name of the element.
214
+ # @returns [String] The tag name of the element, always in lowercase for consistency across browsers.
215
215
  def tag_name
216
- get("name")
216
+ get("name").downcase
217
217
  end
218
218
 
219
219
  # A struct representing the size of an element.
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'version'
6
+ require_relative "version"
7
7
 
8
8
  module Async
9
9
  module WebDriver
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
6
  module Async
7
7
  module WebDriver
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'version'
7
- require_relative 'error'
6
+ require_relative "version"
7
+ require_relative "error"
8
8
 
9
9
  module Async
10
10
  module WebDriver
@@ -46,10 +46,10 @@ module Async
46
46
  # @returns [Object] The unwrapped value.
47
47
  def unwrap_object(value)
48
48
  if value.is_a?(Hash) and value.key?(ELEMENT_KEY)
49
- Element.new(self.session, value[ELEMENT_KEY])
50
- else
51
- value
49
+ value = Element.new(self.session, value[ELEMENT_KEY])
52
50
  end
51
+
52
+ return value
53
53
  end
54
54
 
55
55
  # Used by `JSON.load` to unwrap objects.
@@ -60,6 +60,8 @@ module Async
60
60
  when Array
61
61
  value.map!(&method(:unwrap_object))
62
62
  end
63
+
64
+ return value
63
65
  end
64
66
 
65
67
  # Extract the value from the reply.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
6
  module Async
7
7
  module WebDriver
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative '../xpath'
6
+ require_relative "../xpath"
7
7
 
8
8
  module Async
9
9
  module WebDriver
@@ -32,7 +32,12 @@ module Async
32
32
  element.clear
33
33
  end
34
34
 
35
- element.send_keys(value)
35
+ if element.tag_name == "select"
36
+ option = element.find_element_by_xpath(".//option[text()=#{XPath::escape(value)}]")
37
+ option.click unless option.selected?
38
+ else
39
+ element.send_keys(value)
40
+ end
36
41
  end
37
42
 
38
43
  # Click a button with the given label.
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require 'uri'
6
+ require "uri"
7
7
 
8
8
  module Async
9
9
  module WebDriver
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require 'base64'
6
+ require "base64"
7
7
 
8
8
  module Async
9
9
  module WebDriver
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require 'base64'
6
+ require "base64"
7
7
 
8
8
  module Async
9
9
  module WebDriver
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'scope/alerts'
7
- require_relative 'scope/cookies'
8
- require_relative 'scope/document'
9
- require_relative 'scope/elements'
10
- require_relative 'scope/fields'
11
- require_relative 'scope/frames'
12
- require_relative 'scope/navigation'
13
- require_relative 'scope/printing'
14
- require_relative 'scope/screen_capture'
15
- require_relative 'scope/timeouts'
6
+ require_relative "scope/alerts"
7
+ require_relative "scope/cookies"
8
+ require_relative "scope/document"
9
+ require_relative "scope/elements"
10
+ require_relative "scope/fields"
11
+ require_relative "scope/frames"
12
+ require_relative "scope/navigation"
13
+ require_relative "scope/printing"
14
+ require_relative "scope/screen_capture"
15
+ require_relative "scope/timeouts"
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'request_helper'
7
- require_relative 'element'
6
+ require_relative "request_helper"
7
+ require_relative "element"
8
8
 
9
- require_relative 'scope'
9
+ require_relative "scope"
10
10
 
11
11
  module Async
12
12
  module WebDriver
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
6
  module Async
7
7
  module WebDriver
8
- VERSION = "0.6.0"
8
+ VERSION = "0.8.0"
9
9
  end
10
10
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2023, by Samuel Williams.
4
+ # Copyright, 2023-2025, by Samuel Williams.
5
5
 
6
- require_relative 'webdriver/bridge'
7
- require_relative 'webdriver/bridge/pool'
6
+ require_relative "webdriver/bridge"
7
+ require_relative "webdriver/bridge/pool"
8
8
 
9
- require_relative 'webdriver/client'
10
- require_relative 'webdriver/locator'
9
+ require_relative "webdriver/client"
10
+ require_relative "webdriver/locator"
data/license.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright, 2023-2024, by Samuel Williams.
3
+ Copyright, 2023-2025, by Samuel Williams.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/readme.md CHANGED
@@ -18,9 +18,20 @@ Please see the [project documentation](https://socketry.github.io/async-webdrive
18
18
 
19
19
  - [GitHub Actions Integrations](https://socketry.github.io/async-webdriver/guides/github-actions-integration/index) - This guide explains how to use `async-webdriver` with GitHub Actions.
20
20
 
21
+ - [Sus Integration](https://socketry.github.io/async-webdriver/guides/sus-integration/index) - This guide will show you how to integrate `async-webdriver` with the sus test framework.
22
+
23
+ ## Releases
24
+
25
+ Please see the [project releases](https://socketry.github.io/async-webdriver/releases/index) for all releases.
26
+
27
+ ### v0.8.0
28
+
29
+ - Fix `fill_in` `<select>` on Safari.
30
+ - `Element#tag_name` now normalizes the tag name to lowercase (Safari returns uppercase while other browsers return lowercase).
31
+
21
32
  ## See Also
22
33
 
23
- - [sus-fixtures-async-webdriver](https://github.com/socketry/sus-fixtures-async-webdriver) - STandard fixtures for testing web applications with `async-webdriver`.
34
+ - [sus-fixtures-async-webdriver](https://github.com/socketry/sus-fixtures-async-webdriver) - Standard fixtures for testing web applications with `async-webdriver`.
24
35
 
25
36
  ## Contributing
26
37
 
@@ -34,8 +45,8 @@ We welcome contributions to this project.
34
45
 
35
46
  ### Developer Certificate of Origin
36
47
 
37
- This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
48
+ In order to protect users of this project, we require all contributors to comply with the [Developer Certificate of Origin](https://developercertificate.org/). This ensures that all contributions are properly licensed and attributed.
38
49
 
39
- ### Contributor Covenant
50
+ ### Community Guidelines
40
51
 
41
- This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
52
+ This project is best served by a collaborative and respectful environment. Treat each other professionally, respect differing viewpoints, and engage constructively. Harassment, discrimination, or harmful behavior is not tolerated. Communicate clearly, listen actively, and support one another. If any issues arise, please inform the project maintainers.
data/releases.md ADDED
@@ -0,0 +1,6 @@
1
+ # Releases
2
+
3
+ ## v0.8.0
4
+
5
+ - Fix `fill_in` `<select>` on Safari.
6
+ - `Element#tag_name` now normalizes the tag name to lowercase (Safari returns uppercase while other browsers return lowercase).
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,11 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.8.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-05-04 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-actor
@@ -109,8 +108,6 @@ dependencies:
109
108
  - - "~>"
110
109
  - !ruby/object:Gem::Version
111
110
  version: '0.2'
112
- description:
113
- email:
114
111
  executables: []
115
112
  extensions: []
116
113
  extra_rdoc_files: []
@@ -145,6 +142,7 @@ files:
145
142
  - lib/async/webdriver/xpath.rb
146
143
  - license.md
147
144
  - readme.md
145
+ - releases.md
148
146
  homepage: https://github.com/socketry/async-webdriver
149
147
  licenses:
150
148
  - MIT
@@ -152,7 +150,6 @@ metadata:
152
150
  documentation_uri: https://socketry.github.io/async-webdriver/
153
151
  funding_uri: https://github.com/sponsors/ioquatix
154
152
  source_code_uri: https://github.com/socketry/async-webdriver.git
155
- post_install_message:
156
153
  rdoc_options: []
157
154
  require_paths:
158
155
  - lib
@@ -160,15 +157,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
157
  requirements:
161
158
  - - ">="
162
159
  - !ruby/object:Gem::Version
163
- version: '3.1'
160
+ version: '3.2'
164
161
  required_rubygems_version: !ruby/object:Gem::Requirement
165
162
  requirements:
166
163
  - - ">="
167
164
  - !ruby/object:Gem::Version
168
165
  version: '0'
169
166
  requirements: []
170
- rubygems_version: 3.5.3
171
- signing_key:
167
+ rubygems_version: 3.6.7
172
168
  specification_version: 4
173
169
  summary: A native library implementing the W3C WebDriver client specification.
174
170
  test_files: []
metadata.gz.sig CHANGED
Binary file