aranha-selenium 0.4.2 → 0.5.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 +4 -4
- data/lib/aranha/selenium/session/downloads.rb +21 -0
- data/lib/aranha/selenium/session/find.rb +21 -0
- data/lib/aranha/selenium/session/select.rb +23 -0
- data/lib/aranha/selenium/session/wait.rb +49 -0
- data/lib/aranha/selenium/session.rb +6 -70
- data/lib/aranha/selenium/version.rb +1 -1
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b77cef3090b92e53523e8b58ca223c3f3d507d3f389fcb93b5ea14293761ffa4
|
4
|
+
data.tar.gz: f7c4ad1976d059fda2b14ea3634575ca1e8a3c32233f00f51bfe0727865a4a0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68e0c97869bfdf83a45fbcdc3d04eda5987148b85954657289e8ab40f8025f5fb508e22baef3ef4475fe9037d39c6ded8462dbc6d139d79daac0e1ca0d7ad5c7
|
7
|
+
data.tar.gz: 987ab2d37efc2c98701485c36b03393640185e8a89fa804a510a4671a1d651ce3dc62fa9f9247deaa9aecd23e65b29e8514ec829a665da40d731679cbf553691
|
@@ -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)
|
19
|
+
wait.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
|
-
|
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
|
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
|
+
version: 0.5.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-
|
11
|
+
date: 2022-10-27 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.
|
19
|
+
version: '0.106'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
22
|
+
version: 0.106.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.
|
29
|
+
version: '0.106'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.
|
32
|
+
version: 0.106.1
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: selenium-webdriver
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,6 +78,10 @@ files:
|
|
78
78
|
- lib/aranha/selenium/driver_factory/firefox.rb
|
79
79
|
- lib/aranha/selenium/driver_factory/firefox_auto_download_mime_types
|
80
80
|
- lib/aranha/selenium/session.rb
|
81
|
+
- lib/aranha/selenium/session/downloads.rb
|
82
|
+
- lib/aranha/selenium/session/find.rb
|
83
|
+
- lib/aranha/selenium/session/select.rb
|
84
|
+
- lib/aranha/selenium/session/wait.rb
|
81
85
|
- lib/aranha/selenium/version.rb
|
82
86
|
homepage:
|
83
87
|
licenses: []
|