aranha-selenium 0.7.0 → 0.7.1

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: b41d3bc5c20bff56137f7b907ed7e1bc29cf746e3f128747aa1725d148c4e629
4
- data.tar.gz: 73e5dcdbaefee54d60d578f3e0900b3dda6ff804624b93494a7761844558dcb8
3
+ metadata.gz: 951e9e5db49e16c7825f8b24707b6b61236b78bef2a5b99c73860291e7dc7b23
4
+ data.tar.gz: 7ed611aadeb3401b3e2e5c2d43f5d5554be7f92d32ffe8ec8e0bb25c93f7f93e
5
5
  SHA512:
6
- metadata.gz: 21161163e5f85f2b150961e5349849aecb0e59ae5f9bfef60b3d637f7dc0497fe0cbac46963e90eb85359a89cf6e3277d8d413e6e515c2c2273054b11c4dd956
7
- data.tar.gz: fcb40b98de050e8fd7b79c062788fe6d15e3f236080db457974dcae5fa04f0e6a10c73924c434ce3b7b5073bb355d28788615779a3ee7ac4d188d62276a9a6e2
6
+ metadata.gz: 893bc2edc73ec2c6c2004729d3515e86bfd6ee809f2b5cf183647e308873fb8a6b4e970ccd3e721007c25dddcc7b64be0b7bde884298eb5c63c993ec2e14b3d4
7
+ data.tar.gz: '04994c6b945fac7288c65232de46af2d4b10d2b1edc26c0b0ef1159462b09c28a38931c71df156f53d9a35b66391c5a306b69b6aa73cb67634496c1eaa625fe7'
data/Gemfile CHANGED
@@ -4,5 +4,5 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
- local_gemfile = ::File.join(::File.dirname(__FILE__), 'Gemfile.local')
8
- eval_gemfile local_gemfile if ::File.exist?(local_gemfile)
7
+ local_gemfile = File.join(File.dirname(__FILE__), 'Gemfile.local')
8
+ eval_gemfile local_gemfile if File.exist?(local_gemfile)
@@ -1,51 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'aranha/selenium/defaults'
3
+ require 'aranha/selenium/driver_options'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Aranha
7
7
  module Selenium
8
8
  class DriverFactory
9
9
  class Base
10
+ # @!attribute [r] options
11
+ # @return [Aranha::Selenium::DriverOptions]
12
+
13
+ # @!method initialize(options)
14
+ # @param options [Aranha::Selenium::DriverOptions]
10
15
  common_constructor :options do
11
- self.options = options.with_indifferent_access.freeze
16
+ self.options = ::Aranha::Selenium::DriverOptions.assert(options)
12
17
  end
13
18
 
14
19
  def build
15
20
  raise 'Must be overrided'
16
21
  end
17
22
 
18
- def downloads_dir
19
- option_value(:downloads_dir)
20
- end
21
-
22
- def accept_insecure_certs?
23
- option_value(:accept_insecure_certs)
24
- end
25
-
26
- def headless?
27
- option_value(:headless)
28
- end
29
-
30
- def profile_dir
31
- option_value(:profile_dir)
32
- end
33
-
34
- def profile_name
35
- options[:profile_name]
36
- end
37
-
38
- def user_agent
39
- option_value(:user_agent)
40
- end
41
-
42
- private
43
-
44
- def option_value(key)
45
- if options.key?(key)
46
- options.fetch(key)
47
- else
48
- ::Aranha::Selenium::Defaults.instance.send(key)
23
+ ::Aranha::Selenium::DriverOptions.lists.option.each_value do |option_key|
24
+ method_name = option_key.to_s
25
+ method_name = "#{method_name}?" if ::Aranha::Selenium::DriverOptions::BOOLEAN_OPTIONS
26
+ .include?(option_key)
27
+ define_method method_name do
28
+ options.send(method_name)
49
29
  end
50
30
  end
51
31
  end
@@ -40,6 +40,7 @@ module Aranha
40
40
  r = {
41
41
  'browser.download.dir' => downloads_dir,
42
42
  'browser.download.folderList' => 2,
43
+ 'browser.download.start_downloads_in_tmp_dir' => true,
43
44
  'browser.helperApps.neverAsk.saveToDisk' => auto_download_mime_types.join(';'),
44
45
  'pdfjs.disabled' => true
45
46
  }
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'aranha/selenium/driver_options'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
 
5
6
  module Aranha
@@ -11,10 +12,13 @@ module Aranha
11
12
  end
12
13
  end
13
14
 
14
- attr_reader :options
15
+ # @!attribute [r] options
16
+ # @return [ActiveSupport::HashWithIndifferentAccess]
15
17
 
16
- def initialize(options)
17
- @options = options.with_indifferent_access.freeze
18
+ # @!method initialize(options)
19
+ # @param options [ActiveSupport::HashWithIndifferentAccess]
20
+ common_constructor :options do
21
+ self.options = options.with_indifferent_access.freeze
18
22
  end
19
23
 
20
24
  def create_driver
@@ -28,16 +32,17 @@ module Aranha
28
32
  def driver_class
29
33
  Aranha::Selenium::DriverFactory.const_get(driver_name.classify)
30
34
  rescue NameError
31
- raise "Unknown Aranha Selenium driver: \"#{driver_name}\"" \
32
- " (Class \"Aranha::Selenium::DriverFactory::#{driver_name.classify}\" not found)"
35
+ raise "Unknown Aranha Selenium driver: \"#{driver_name}\" " \
36
+ "(Class \"Aranha::Selenium::DriverFactory::#{driver_name.classify}\" not found)"
33
37
  end
34
38
 
35
39
  def default_driver_name
36
40
  :firefox
37
41
  end
38
42
 
43
+ # @return [Aranha::Selenium::DriverOptions]
39
44
  def driver_options
40
- options.except(:driver)
45
+ ::Aranha::Selenium::DriverOptions.assert(options.except(:driver))
41
46
  end
42
47
 
43
48
  require_sub __FILE__
@@ -5,7 +5,7 @@ require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Aranha
7
7
  module Selenium
8
- class Defaults
8
+ class DriverOptions
9
9
  class Option
10
10
  common_constructor :owner, :key, :sanitizer, default: [nil] do
11
11
  self.key = key.to_sym
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/boolean'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'tmpdir'
6
+
7
+ module Aranha
8
+ module Selenium
9
+ class DriverOptions
10
+ class << self
11
+ # @return [Aranha::Selenium::DriverOptions]
12
+ # @param [Aranha::Selenium::DriverOptions, Hash]
13
+ def assert(source)
14
+ return source if source.is_a?(self)
15
+
16
+ new(source)
17
+ end
18
+
19
+ # @return [Aranha::Selenium::DriverOptions]
20
+ def instance
21
+ @instance ||= new
22
+ end
23
+ end
24
+
25
+ enable_listable
26
+ lists.add_symbol :option, :accept_insecure_certs, :downloads_dir, :headless, :profile_dir,
27
+ :profile_name, :user_agent
28
+ BOOLEAN_OPTIONS = [OPTION_ACCEPT_INSECURE_CERTS, OPTION_HEADLESS].freeze
29
+
30
+ DEFAULT_DOWNLOADS_DIR = ::File.join(::Dir.tmpdir, 'aranha_downloads_dir')
31
+ DEFAULT_ACCEPT_INSECURE_CERTS = false
32
+ DEFAULT_HEADLESS = false
33
+ DEFAULT_PROFILE_DIR = nil
34
+ DEFAULT_PROFILE_NAME = nil
35
+ DEFAULT_USER_AGENT = nil
36
+
37
+ # @param user_values [Hash]
38
+ def initialize(user_values = {})
39
+ user_values.each { |k, v| send("#{k}=", v) }
40
+ end
41
+
42
+ lists.option.each_value do |key|
43
+ define_method(key) { send("#{key}_option").value }
44
+ define_method("#{key}=") { |user_value| send("#{key}_option").user_value = user_value }
45
+
46
+ option_proc = nil
47
+ if BOOLEAN_OPTIONS.include?(key)
48
+ option_proc = proc { |v| ::EacRubyUtils::Boolean.parse(v) }
49
+ define_method("#{key}?") { send(key) }
50
+ end
51
+
52
+ define_method("#{key}_option") do
53
+ options[key] ||= ::Aranha::Selenium::DriverOptions::Option.new(self, key, option_proc)
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def options
60
+ @options ||= {}
61
+ end
62
+
63
+ require_sub __FILE__
64
+ end
65
+ end
66
+ end
@@ -1,19 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_fs/file_info'
4
+ require 'eac_ruby_utils/core_ext'
3
5
  require 'tmpdir'
4
6
 
5
7
  module Aranha
6
8
  module Selenium
7
9
  class Session < ::SimpleDelegator
8
10
  class Downloads
9
- attr_reader :dir
10
-
11
- def initialize
12
- @dir = ::Dir.mktmpdir
11
+ # @return [Enumerable<Pathname>]
12
+ def current
13
+ dir.glob('**/*').select do |path|
14
+ !::EacFs::FileInfo.new(path).open? && path.size.positive?
15
+ rescue Errno::ENOENT
16
+ false
17
+ end
13
18
  end
14
19
 
15
- def current
16
- Dir.glob("#{dir}/**/*")
20
+ # @return [Pathname]
21
+ def dir
22
+ @dir ||= ::Dir.mktmpdir.to_pathname
17
23
  end
18
24
  end
19
25
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'aranha/selenium/driver_options'
3
4
  require 'aranha/selenium/driver_factory'
4
5
  require 'eac_ruby_utils/core_ext'
5
6
  require 'selenium-webdriver'
@@ -9,13 +10,11 @@ module Aranha
9
10
  class Session < ::SimpleDelegator
10
11
  require_sub __FILE__, include_modules: true
11
12
  enable_simple_cache
12
- attr_reader :downloads
13
13
 
14
14
  def initialize(options = {})
15
- @downloads = Downloads.new
16
15
  super(
17
16
  ::Aranha::Selenium::DriverFactory.create_driver(
18
- options.merge(download_dir: @downloads.dir)
17
+ options.merge(::Aranha::Selenium::DriverOptions::OPTION_DOWNLOADS_DIR => downloads.dir)
19
18
  )
20
19
  )
21
20
  end
@@ -28,6 +27,11 @@ module Aranha
28
27
  "<html>\n#{s}\n</html>\n"
29
28
  end
30
29
 
30
+ # @return [Aranha::Selenium::Session::Downloads]
31
+ def downloads
32
+ @downloads ||= ::Aranha::Selenium::Session::Downloads.new
33
+ end
34
+
31
35
  private
32
36
 
33
37
  def element_click(element)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Aranha
4
4
  module Selenium
5
- VERSION = '0.7.0'
5
+ VERSION = '0.7.1'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,35 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aranha-selenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
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-06-09 00:00:00.000000000 Z
11
+ date: 2023-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: eac_ruby_utils
14
+ name: eac_fs
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.117'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.117.1
19
+ version: '0.17'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0.117'
30
- - - ">="
26
+ version: '0.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eac_ruby_utils
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.120'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
31
39
  - !ruby/object:Gem::Version
32
- version: 0.117.1
40
+ version: '0.120'
33
41
  - !ruby/object:Gem::Dependency
34
42
  name: selenium-webdriver
35
43
  requirement: !ruby/object:Gem::Requirement
@@ -56,14 +64,14 @@ dependencies:
56
64
  requirements:
57
65
  - - "~>"
58
66
  - !ruby/object:Gem::Version
59
- version: 0.5.1
67
+ version: '0.9'
60
68
  type: :development
61
69
  prerelease: false
62
70
  version_requirements: !ruby/object:Gem::Requirement
63
71
  requirements:
64
72
  - - "~>"
65
73
  - !ruby/object:Gem::Version
66
- version: 0.5.1
74
+ version: '0.9'
67
75
  description:
68
76
  email:
69
77
  executables: []
@@ -72,13 +80,13 @@ extra_rdoc_files: []
72
80
  files:
73
81
  - Gemfile
74
82
  - lib/aranha/selenium.rb
75
- - lib/aranha/selenium/defaults.rb
76
- - lib/aranha/selenium/defaults/option.rb
77
83
  - lib/aranha/selenium/driver_factory.rb
78
84
  - lib/aranha/selenium/driver_factory/base.rb
79
85
  - lib/aranha/selenium/driver_factory/chrome.rb
80
86
  - lib/aranha/selenium/driver_factory/firefox.rb
81
87
  - lib/aranha/selenium/driver_factory/firefox_auto_download_mime_types
88
+ - lib/aranha/selenium/driver_options.rb
89
+ - lib/aranha/selenium/driver_options/option.rb
82
90
  - lib/aranha/selenium/session.rb
83
91
  - lib/aranha/selenium/session/downloads.rb
84
92
  - lib/aranha/selenium/session/find.rb
@@ -96,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
104
  requirements:
97
105
  - - ">="
98
106
  - !ruby/object:Gem::Version
99
- version: '0'
107
+ version: '2.7'
100
108
  required_rubygems_version: !ruby/object:Gem::Requirement
101
109
  requirements:
102
110
  - - ">="
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/boolean'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'tmpdir'
6
-
7
- module Aranha
8
- module Selenium
9
- class Defaults
10
- include ::Singleton
11
-
12
- DEFAULT_DOWNLOADS_DIR = ::File.join(::Dir.tmpdir, 'aranha_downloads_dir')
13
- DEFAULT_ACCEPT_INSECURE_CERTS = false
14
- DEFAULT_HEADLESS = false
15
- DEFAULT_PROFILE_DIR = nil
16
- DEFAULT_USER_AGENT = nil
17
-
18
- %w[accept_insecure_certs downloads_dir headless profile_dir user_agent].each do |key|
19
- define_method(key) { send("#{key}_option").value }
20
- define_method("#{key}=") { |user_value| send("#{key}_option").user_value = user_value }
21
- define_method("#{key}_option") do
22
- options[key] ||= ::Aranha::Selenium::Defaults::Option.new(self, key)
23
- end
24
- end
25
-
26
- # @return [Aranha::Selenium::Defaults::Option]
27
- def headless_option
28
- options['headless'] ||= ::Aranha::Selenium::Defaults::Option.new(
29
- self, 'headless', ->(v) { ::EacRubyUtils::Boolean.parse(v) }
30
- )
31
- end
32
-
33
- private
34
-
35
- def options
36
- @options ||= {}
37
- end
38
-
39
- require_sub __FILE__
40
- end
41
- end
42
- end