aranha-selenium 0.8.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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: {}