aranha-selenium 0.4.2 → 0.6.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: b47d04d2522cd3c057f72c318c546bbc58e1c43ea7f09008f7e1f8a496951b60
4
- data.tar.gz: 58212effa6d0e6a2d0dd87fa97ea2862865d953c481d6b2dc8541af494a347f0
3
+ metadata.gz: 7aceb03be8d423ca084646615d2869147f8ae89137f8c753732dabebde6032f5
4
+ data.tar.gz: f39cd164dd36c4f333693a8d33ebadce8a5a13de0a70c25ce039714ace68c8b3
5
5
  SHA512:
6
- metadata.gz: a477eead3f991fb2d1085805ecb207a06d067d7a31c68c2243908ab60fb0c043edd185a1e88f2f7bf0b416f7ee9e2996a4e783275eceebf9fe5e39c453a7405d
7
- data.tar.gz: 90848d780baee798fae498fe2d2672eb8e5e3be52aa4323363785ac59c06007baac9a2b9048821675588f62cf8ee635d8f7cb6f5cd384ef0e28d9d5945565ba4
6
+ metadata.gz: 6caca3383682a545705954abbc971b07aa3a259ca03bc1c9be2d29b26274cf410d31fb67bf87ea408d1361a3bc9d748a2b0dcc90416662b91c63bf1d9794a218
7
+ data.tar.gz: 35a436b59edc41e266a5553ea8ffb495329d3b74ccd2ea4634a034a8cd8a659d39adaccf77bf14f5671bbb431a8feedded5f2c06926345b3aaa8bb81b1f21f10
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aranha/selenium/driver_factory'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Aranha
7
+ module Selenium
8
+ class Defaults
9
+ class Option
10
+ common_constructor :owner, :key, :sanitizer, default: [nil] do
11
+ self.key = key.to_sym
12
+ end
13
+ attr_accessor :user_value
14
+
15
+ # @return [String]
16
+ def constant_name
17
+ "default_#{key}".upcase
18
+ end
19
+
20
+ # @return [Object]
21
+ def default_value
22
+ owner.class.const_get(constant_name)
23
+ end
24
+
25
+ # @return [String]
26
+ def envvar_name
27
+ "aranha_selenium_#{key}".upcase
28
+ end
29
+
30
+ # @return [Object]
31
+ def value
32
+ sanitized_value do
33
+ next ENV.fetch(envvar_name) if ENV.key?(envvar_name)
34
+ next user_value unless user_value.nil?
35
+
36
+ default_value
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def sanitized_value(&block)
43
+ r = block.call
44
+ sanitizer.present? ? sanitizer.call(r) : r
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,41 @@
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_USER_AGENT = nil
16
+
17
+ %w[accept_insecure_certs downloads_dir headless user_agent].each do |key|
18
+ define_method(key) { send("#{key}_option").value }
19
+ define_method("#{key}=") { |user_value| send("#{key}_option").user_value = user_value }
20
+ define_method("#{key}_option") do
21
+ options[key] ||= ::Aranha::Selenium::Defaults::Option.new(self, key)
22
+ end
23
+ end
24
+
25
+ # @return [Aranha::Selenium::Defaults::Option]
26
+ def headless_option
27
+ options['headless'] ||= ::Aranha::Selenium::Defaults::Option.new(
28
+ self, 'headless', ->(v) { ::EacRubyUtils::Boolean.parse(v) }
29
+ )
30
+ end
31
+
32
+ private
33
+
34
+ def options
35
+ @options ||= {}
36
+ end
37
+
38
+ require_sub __FILE__
39
+ end
40
+ end
41
+ end
@@ -1,44 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/json'
4
- require 'active_support/core_ext/hash/indifferent_access'
5
- require 'selenium-webdriver'
6
- require 'tmpdir'
3
+ require 'aranha/selenium/defaults'
4
+ require 'eac_ruby_utils/core_ext'
7
5
 
8
6
  module Aranha
9
7
  module Selenium
10
8
  class DriverFactory
11
9
  class Base
12
- DEFAULT_DOWNLOADS_DIR = ::File.join(::Dir.tmpdir, 'aranha_downloads_dir')
13
- DEFAULT_ACCEPT_INSECURE_CERTS = false
14
- DEFAULT_HEADLESS = false
15
- DEFAULT_USER_AGENT = nil
16
-
17
- class << self
18
- attr_writer :default_accept_insecure_certs, :default_downloads_dir, :default_headless,
19
- :default_user_agent
20
-
21
- def default_downloads_dir
22
- @default_downloads_dir || DEFAULT_DOWNLOADS_DIR
23
- end
24
-
25
- def default_accept_insecure_certs
26
- @default_accept_insecure_certs || DEFAULT_ACCEPT_INSECURE_CERTS
27
- end
28
-
29
- def default_headless
30
- @default_headless || DEFAULT_HEADLESS
31
- end
32
-
33
- def default_user_agent
34
- @default_user_agent || DEFAULT_USER_AGENT
35
- end
36
- end
37
-
38
- attr_reader :options
39
-
40
- def initialize(options)
41
- @options = options.with_indifferent_access.freeze
10
+ common_constructor :options do
11
+ self.options = options.with_indifferent_access.freeze
42
12
  end
43
13
 
44
14
  def build
@@ -75,7 +45,7 @@ module Aranha
75
45
  if options.key?(key)
76
46
  options.fetch(key)
77
47
  else
78
- ::Aranha::Selenium::DriverFactory::Base.send("default_#{key}")
48
+ ::Aranha::Selenium::Defaults.instance.send(key)
79
49
  end
80
50
  end
81
51
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tmpdir'
4
+
5
+ module Aranha
6
+ module Selenium
7
+ class Session < ::SimpleDelegator
8
+ class Downloads
9
+ attr_reader :dir
10
+
11
+ def initialize
12
+ @dir = ::Dir.mktmpdir
13
+ end
14
+
15
+ def current
16
+ Dir.glob("#{dir}/**/*")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aranha
4
+ module Selenium
5
+ class Session < ::SimpleDelegator
6
+ module Find
7
+ # @return [Selenium::WebDriver::Element, nil]
8
+ def find_element(*args, &block)
9
+ return args.first if args.count >= 1 && args.first.is_a?(::Selenium::WebDriver::Element)
10
+
11
+ __getobj__.find_element(*args, &block)
12
+ end
13
+
14
+ def find_or_not_element(find_element_args)
15
+ r = find_elements(find_element_args)
16
+ r.any? ? r.first : nil
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aranha
4
+ module Selenium
5
+ class Session < ::SimpleDelegator
6
+ module Select
7
+ def select_option(field, value, *find_element_args)
8
+ select = find_element(*find_element_args)
9
+ option = ::Selenium::WebDriver::Support::Select.new(select)
10
+ option.select_by(field, value)
11
+ end
12
+
13
+ def select_option_by_text(text, *find_element_args)
14
+ select_option(:text, text, *find_element_args)
15
+ end
16
+
17
+ def select_option_by_value(value, *find_element_args)
18
+ select_option(:value, value, *find_element_args)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aranha
4
+ module Selenium
5
+ class Session < ::SimpleDelegator
6
+ module Wait
7
+ WAIT_DEFAULT_TIMEOUT = 15
8
+
9
+ def wait(timeout = nil)
10
+ timeout ||= wait_default_timeout
11
+ ::Selenium::WebDriver::Wait.new(timeout: timeout)
12
+ end
13
+
14
+ def wait_default_timeout
15
+ WAIT_DEFAULT_TIMEOUT
16
+ end
17
+
18
+ def wait_for_click(find_element_args, timeout = nil)
19
+ wait(timeout).until do
20
+ element = find_element(find_element_args)
21
+ element ? element_click(element) : nil
22
+ end
23
+ end
24
+
25
+ def wait_for_element(find_element_args)
26
+ wait.until { find_element(find_element_args) }
27
+ end
28
+
29
+ def wait_for_download
30
+ initial_downloads = downloads.current
31
+ yield
32
+ new_downloads = []
33
+ wait.until do
34
+ new_downloads = downloads.current - initial_downloads
35
+ new_downloads.any?
36
+ end
37
+ new_downloads.first
38
+ end
39
+
40
+ def wait_for_url_change(&block)
41
+ previous_url = current_url
42
+ block&.call
43
+
44
+ wait.until { current_url != previous_url }
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,15 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'aranha/selenium/driver_factory'
4
+ require 'eac_ruby_utils/core_ext'
4
5
 
5
6
  module Aranha
6
7
  module Selenium
7
8
  class Session < ::SimpleDelegator
8
- attr_reader :downloads, :wait
9
+ require_sub __FILE__, include_modules: true
10
+ enable_simple_cache
11
+ attr_reader :downloads
9
12
 
10
13
  def initialize(options = {})
11
14
  @downloads = Downloads.new
12
- @wait = ::Selenium::WebDriver::Wait.new(timeout: 15)
13
15
  super(
14
16
  ::Aranha::Selenium::DriverFactory.create_driver(
15
17
  options.merge(download_dir: @downloads.dir)
@@ -17,61 +19,6 @@ module Aranha
17
19
  )
18
20
  end
19
21
 
20
- # @return [Selenium::WebDriver::Element, nil]
21
- def find_element(*args, &block)
22
- return args.first if args.count >= 1 && args.first.is_a?(::Selenium::WebDriver::Element)
23
-
24
- __getobj__.find_element(*args, &block)
25
- end
26
-
27
- def find_or_not_element(find_element_args)
28
- r = find_elements(find_element_args)
29
- r.any? ? r.first : nil
30
- end
31
-
32
- def select_option(field, value, *find_element_args)
33
- select = find_element(*find_element_args)
34
- option = ::Selenium::WebDriver::Support::Select.new(select)
35
- option.select_by(field, value)
36
- end
37
-
38
- def select_option_by_text(text, *find_element_args)
39
- select_option(:text, text, *find_element_args)
40
- end
41
-
42
- def select_option_by_value(value, *find_element_args)
43
- select_option(:value, value, *find_element_args)
44
- end
45
-
46
- def wait_for_click(find_element_args)
47
- wait.until do
48
- element = find_element(find_element_args)
49
- element ? element_click(element) : nil
50
- end
51
- end
52
-
53
- def wait_for_element(find_element_args)
54
- wait.until { find_element(find_element_args) }
55
- end
56
-
57
- def wait_for_download
58
- initial_downloads = downloads.current
59
- yield
60
- new_downloads = []
61
- wait.until do
62
- new_downloads = downloads.current - initial_downloads
63
- new_downloads.any?
64
- end
65
- new_downloads.first
66
- end
67
-
68
- def wait_for_url_change(&block)
69
- previous_url = current_url
70
- block&.call
71
-
72
- wait.until { current_url != previous_url }
73
- end
74
-
75
22
  def current_source
76
23
  element = find_element(xpath: '/html[1]')
77
24
  raise 'Root element not found' unless element
@@ -80,25 +27,14 @@ module Aranha
80
27
  "<html>\n#{s}\n</html>\n"
81
28
  end
82
29
 
83
- class Downloads
84
- attr_reader :dir
85
-
86
- def initialize
87
- @dir = ::Dir.mktmpdir
88
- end
89
-
90
- def current
91
- Dir.glob("#{dir}/**/*")
92
- end
93
- end
94
-
95
30
  private
96
31
 
97
32
  def element_click(element)
98
33
  element.click
99
34
  element
100
35
  rescue ::Selenium::WebDriver::Error::ElementClickInterceptedError,
101
- ::Selenium::WebDriver::Error::ElementNotInteractableError
36
+ ::Selenium::WebDriver::Error::ElementNotInteractableError,
37
+ ::Selenium::WebDriver::Error::StaleElementReferenceError
102
38
  nil
103
39
  end
104
40
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Aranha
4
4
  module Selenium
5
- VERSION = '0.4.2'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
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.4.2
4
+ version: 0.6.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: 2022-09-04 00:00:00.000000000 Z
11
+ date: 2023-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_ruby_utils
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.102'
19
+ version: '0.117'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.102.1
22
+ version: 0.117.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '0.102'
29
+ version: '0.117'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.102.1
32
+ version: 0.117.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: selenium-webdriver
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -72,12 +72,18 @@ extra_rdoc_files: []
72
72
  files:
73
73
  - Gemfile
74
74
  - lib/aranha/selenium.rb
75
+ - lib/aranha/selenium/defaults.rb
76
+ - lib/aranha/selenium/defaults/option.rb
75
77
  - lib/aranha/selenium/driver_factory.rb
76
78
  - lib/aranha/selenium/driver_factory/base.rb
77
79
  - lib/aranha/selenium/driver_factory/chrome.rb
78
80
  - lib/aranha/selenium/driver_factory/firefox.rb
79
81
  - lib/aranha/selenium/driver_factory/firefox_auto_download_mime_types
80
82
  - lib/aranha/selenium/session.rb
83
+ - lib/aranha/selenium/session/downloads.rb
84
+ - lib/aranha/selenium/session/find.rb
85
+ - lib/aranha/selenium/session/select.rb
86
+ - lib/aranha/selenium/session/wait.rb
81
87
  - lib/aranha/selenium/version.rb
82
88
  homepage:
83
89
  licenses: []