aranha-selenium 0.7.0 → 0.7.1

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: 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