aranha-selenium 0.8.0 → 0.10.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: 38da8ad6f2737626bb06a9d17c4088e797de9cfb7f3e48ac7313fe2a5a6fbf08
4
- data.tar.gz: feb50faa49ae4569110e6581c14181ec9929cc85487be6335acca527a7031b6a
3
+ metadata.gz: 311e72ca409d486986d984d0f5ad995f9aa83912a2ec5eb3eeb9851b7c1791cf
4
+ data.tar.gz: a2fedda793addcc387a7a3f59b32f5e6dfc802ea8d139df03fd5c6d93e0826ec
5
5
  SHA512:
6
- metadata.gz: 6396875e4a91c55bd620be2af4428c34abbd1511418461bca45a4971cee8d358b9f560d71e8371f825103eb5308b8ce7d18ede0c6d67cb557151ae39ae9982e1
7
- data.tar.gz: e2b31b761174dfbd30c42981f949bae4bfb13bc7d2a20f3ccc7eed24f83bc24cfa44d6239f8391fd97ffb50859403376229b2e9d15fa98ce7d62757188670ba7
6
+ metadata.gz: da8d00d672419479fbafeadf723647d7c696d647e27897d0291b503e76fd250e600a04f23354ae5da73b0ecc66e19e8b2f8866e2dbec47b2e112c663f00e703b
7
+ data.tar.gz: ec09d4e135dba9a5e2c588b49e81f46b572fb81cb9f59ada2c2e80af99455b9e6d4a121a38176021bccacaef6ba0bd920d0ca61384d7db9c314c096ae5e07c62
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'aranha/selenium/driver_options'
4
+ require 'aranha/selenium/executables'
4
5
  require 'eac_ruby_utils/core_ext'
5
6
 
6
7
  module Aranha
@@ -12,6 +13,11 @@ module Aranha
12
13
  end
13
14
  end
14
15
 
16
+ DRIVERS = {
17
+ chrome: :chromedriver,
18
+ firefox: :geckodriver
19
+ }.freeze
20
+
15
21
  # @!attribute [r] options
16
22
  # @return [ActiveSupport::HashWithIndifferentAccess]
17
23
 
@@ -37,7 +43,11 @@ module Aranha
37
43
  end
38
44
 
39
45
  def default_driver_name
40
- :firefox
46
+ DRIVERS.each do |driver, executable|
47
+ return driver if ::Aranha::Selenium::Executables.send(executable).exist?
48
+ end
49
+
50
+ raise "No driver found (#{DRIVERS.value.join(', ')})"
41
51
  end
42
52
 
43
53
  # @return [Aranha::Selenium::DriverOptions]
@@ -23,17 +23,31 @@ module Aranha
23
23
  end
24
24
 
25
25
  enable_listable
26
+ lists.add_symbol :headless, :auto, :no, :yes
26
27
  lists.add_symbol :option, :accept_insecure_certs, :downloads_dir, :headless, :profile_dir,
27
28
  :profile_name, :user_agent
28
29
  BOOLEAN_OPTIONS = [OPTION_ACCEPT_INSECURE_CERTS, OPTION_HEADLESS].freeze
29
30
 
30
31
  DEFAULT_DOWNLOADS_DIR = ::File.join(::Dir.tmpdir, 'aranha_downloads_dir')
31
32
  DEFAULT_ACCEPT_INSECURE_CERTS = false
32
- DEFAULT_HEADLESS = false
33
+ DEFAULT_HEADLESS = HEADLESS_AUTO
33
34
  DEFAULT_PROFILE_DIR = nil
34
35
  DEFAULT_PROFILE_NAME = nil
35
36
  DEFAULT_USER_AGENT = nil
36
37
 
38
+ HEADLESS_AUTO_ENVVAR = 'DISPLAY'
39
+
40
+ OPTIONS_SANITIZERS = {
41
+ headless: lambda { |value|
42
+ case value
43
+ when HEADLESS_AUTO then ENV[HEADLESS_AUTO_ENVVAR].blank?
44
+ when HEADLESS_NO then false
45
+ when HEADLESS_YES then true
46
+ else value.to_bool
47
+ end
48
+ }
49
+ }.freeze
50
+
37
51
  # @param user_values [Hash]
38
52
  def initialize(user_values = {})
39
53
  user_values.each { |k, v| send("#{k}=", v) }
@@ -45,9 +59,9 @@ module Aranha
45
59
  define_method(key) { send("#{key}_option").value }
46
60
  define_method("#{key}=") { |user_value| send("#{key}_option").user_value = user_value }
47
61
 
48
- option_proc = nil
62
+ option_proc = OPTIONS_SANITIZERS[key]
49
63
  if BOOLEAN_OPTIONS.include?(key)
50
- option_proc = proc { |v| ::EacRubyUtils::Boolean.parse(v) }
64
+ option_proc = proc { |v| ::EacRubyUtils::Boolean.parse(v) } if option_proc.blank?
51
65
  define_method("#{key}?") { send(key) }
52
66
  end
53
67
 
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Aranha
6
+ module Selenium
7
+ module Executables
8
+ class << self
9
+ enable_simple_cache
10
+
11
+ def env
12
+ ::EacRubyUtils::Envs.local
13
+ end
14
+
15
+ private
16
+
17
+ %w[chromedriver geckodriver].each do |program|
18
+ define_method("#{program.underscore}_uncached") do
19
+ env.executable(program, '--version')
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aranha
4
+ module Selenium
5
+ class Session < ::SimpleDelegator
6
+ class FormRequest
7
+ class Field
8
+ class << self
9
+ # @param source [Enumeration, Hash]
10
+ # @return [Array<Aranha::Selenium::Session::FormRequest::Field>]
11
+ def assert_all(source)
12
+ if source.is_a?(::Hash)
13
+ assert_all_from_hash(source)
14
+ elsif source.is_a?(::Enumeration)
15
+ assert_all_from_enumerable(source)
16
+ else
17
+ raise ::ArgumentError, "Invalid source type: #{source.class}"
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def assert_all_from_enumerable(source)
24
+ source.map { |e| new(*e) }
25
+ end
26
+
27
+ def assert_all_from_hash(source)
28
+ source.map { |k, v| new(k, v) }
29
+ end
30
+ end
31
+
32
+ common_constructor :name, :value
33
+
34
+ # @return [String]
35
+ def to_js_object
36
+ "'#{name}': '#{value}'"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_templates/core_ext'
4
+
5
+ module Aranha
6
+ module Selenium
7
+ class Session < ::SimpleDelegator
8
+ class FormRequest
9
+ acts_as_instance_method
10
+ common_constructor :session, :path, :verb, :fields do
11
+ self.fields = ::Aranha::Selenium::Session::FormRequest::Field.assert_all(fields)
12
+ end
13
+
14
+ def result
15
+ session.execute_script(script.pretty_debug)
16
+ end
17
+
18
+ private
19
+
20
+ # @return [String]
21
+ def script
22
+ template.child('form_request_function.js').apply(script_args: script_args)
23
+ end
24
+
25
+ # @return [String]
26
+ def script_args
27
+ ["'#{path}'", "'#{verb}'", script_fields_arg].join(', ')
28
+ end
29
+
30
+ # @return [String]
31
+ def script_fields_arg
32
+ "{#{fields.map(&:to_js_object).join(', ')}}"
33
+ end
34
+
35
+ require_sub __FILE__
36
+ end
37
+ end
38
+ end
39
+ end
@@ -28,11 +28,11 @@ module Aranha
28
28
  wait.until { find_element(find_element_args) }
29
29
  end
30
30
 
31
- def wait_for_download
31
+ def wait_for_download(timeout = nil)
32
32
  initial_downloads = downloads.current
33
33
  yield
34
34
  new_downloads = []
35
- wait.until do
35
+ wait(timeout).until do
36
36
  new_downloads = downloads.current - initial_downloads
37
37
  new_downloads.any?
38
38
  end
@@ -8,7 +8,7 @@ require 'selenium-webdriver'
8
8
  module Aranha
9
9
  module Selenium
10
10
  class Session < ::SimpleDelegator
11
- require_sub __FILE__, include_modules: true
11
+ require_sub __FILE__, include_modules: true, require_mode: :kernel
12
12
  enable_simple_cache
13
13
 
14
14
  def initialize(options = {})
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Aranha
4
4
  module Selenium
5
- VERSION = '0.8.0'
5
+ VERSION = '0.10.0'
6
6
  end
7
7
  end
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_utils/core_ext'
4
+
3
5
  module Aranha
4
6
  module Selenium
5
- require 'aranha/selenium/driver_factory'
6
- require 'aranha/selenium/session'
7
+ require_sub __FILE__
7
8
  end
8
9
  end
@@ -0,0 +1,22 @@
1
+ (function(path, method, params) {
2
+
3
+ // The rest of this code assumes you are not using a library.
4
+ // It can be made less verbose if you use one.
5
+ const form = document.createElement('form');
6
+ form.method = method;
7
+ form.action = path;
8
+
9
+ for (const key in params) {
10
+ if (params.hasOwnProperty(key)) {
11
+ const hiddenField = document.createElement('input');
12
+ hiddenField.type = 'hidden';
13
+ hiddenField.name = key;
14
+ hiddenField.value = params[key];
15
+
16
+ form.appendChild(hiddenField);
17
+ }
18
+ }
19
+
20
+ document.body.appendChild(form);
21
+ form.submit();
22
+ })( %%SCRIPT_ARGS%% );
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aranha-selenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-15 00:00:00.000000000 Z
11
+ date: 2024-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_fs
@@ -30,14 +30,34 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.120'
33
+ version: '0.121'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.120'
40
+ version: '0.121'
41
+ - !ruby/object:Gem::Dependency
42
+ name: eac_templates
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.5'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.5.1
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '0.5'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.5.1
41
61
  - !ruby/object:Gem::Dependency
42
62
  name: selenium-webdriver
43
63
  requirement: !ruby/object:Gem::Requirement
@@ -64,14 +84,28 @@ dependencies:
64
84
  requirements:
65
85
  - - "~>"
66
86
  - !ruby/object:Gem::Version
67
- version: '0.9'
87
+ version: '0.10'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '0.10'
95
+ - !ruby/object:Gem::Dependency
96
+ name: stub_server
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '0.7'
68
102
  type: :development
69
103
  prerelease: false
70
104
  version_requirements: !ruby/object:Gem::Requirement
71
105
  requirements:
72
106
  - - "~>"
73
107
  - !ruby/object:Gem::Version
74
- version: '0.9'
108
+ version: '0.7'
75
109
  description:
76
110
  email:
77
111
  executables: []
@@ -87,12 +121,16 @@ files:
87
121
  - lib/aranha/selenium/driver_factory/firefox_auto_download_mime_types
88
122
  - lib/aranha/selenium/driver_options.rb
89
123
  - lib/aranha/selenium/driver_options/option.rb
124
+ - lib/aranha/selenium/executables.rb
90
125
  - lib/aranha/selenium/session.rb
91
126
  - lib/aranha/selenium/session/downloads.rb
92
127
  - lib/aranha/selenium/session/find.rb
128
+ - lib/aranha/selenium/session/form_request.rb
129
+ - lib/aranha/selenium/session/form_request/field.rb
93
130
  - lib/aranha/selenium/session/select.rb
94
131
  - lib/aranha/selenium/session/wait.rb
95
132
  - lib/aranha/selenium/version.rb
133
+ - template/aranha/selenium/session/form_request/form_request_function.js
96
134
  homepage:
97
135
  licenses: []
98
136
  metadata: {}