aranha-selenium 0.4.2 → 0.6.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: 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: []