watir 6.19.1 → 7.0.0.beta1
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/.github/actions/install-chrome/action.yml +1 -0
- data/.github/actions/setup-linux/action.yml +8 -0
- data/.github/workflows/tests.yml +100 -0
- data/CHANGES.md +7 -0
- data/README.md +1 -4
- data/Rakefile +1 -1
- data/lib/watir.rb +1 -45
- data/lib/watir/alert.rb +3 -8
- data/lib/watir/capabilities.rb +54 -230
- data/lib/watir/cell_container.rb +4 -4
- data/lib/watir/container.rb +4 -26
- data/lib/watir/elements/checkbox.rb +4 -4
- data/lib/watir/elements/date_field.rb +4 -4
- data/lib/watir/elements/date_time_field.rb +4 -4
- data/lib/watir/elements/element.rb +12 -49
- data/lib/watir/elements/file_field.rb +4 -4
- data/lib/watir/elements/font.rb +4 -4
- data/lib/watir/elements/hidden.rb +4 -4
- data/lib/watir/elements/html_elements.rb +444 -445
- data/lib/watir/elements/iframe.rb +4 -4
- data/lib/watir/elements/radio.rb +4 -4
- data/lib/watir/elements/select.rb +12 -78
- data/lib/watir/elements/svg_elements.rb +96 -96
- data/lib/watir/elements/text_field.rb +4 -4
- data/lib/watir/generator/base/generator.rb +4 -4
- data/lib/watir/generator/base/visitor.rb +0 -29
- data/lib/watir/generator/html/generator.rb +2 -1
- data/lib/watir/has_window.rb +4 -4
- data/lib/watir/http_client.rb +0 -8
- data/lib/watir/locators.rb +1 -5
- data/lib/watir/locators/button/matcher.rb +0 -23
- data/lib/watir/locators/button/selector_builder/xpath.rb +4 -15
- data/lib/watir/locators/element/matcher.rb +4 -19
- data/lib/watir/locators/element/selector_builder.rb +2 -37
- data/lib/watir/locators/element/selector_builder/xpath.rb +26 -41
- data/lib/watir/radio_set.rb +2 -2
- data/lib/watir/row_container.rb +4 -4
- data/lib/watir/version.rb +1 -1
- data/lib/watir/wait.rb +4 -74
- data/lib/watir/window.rb +6 -22
- data/lib/watir/window_collection.rb +5 -49
- data/lib/watirspec/implementation.rb +4 -0
- data/spec/spec_helper.rb +2 -7
- data/spec/unit/capabilities_spec.rb +196 -929
- data/spec/unit/match_elements/button_spec.rb +0 -13
- data/spec/unit/match_elements/element_spec.rb +38 -47
- data/spec/unit/match_elements/text_field_spec.rb +6 -6
- data/spec/unit/selector_builder/element_spec.rb +6 -23
- data/spec/unit/selector_builder/text_field_spec.rb +6 -7
- data/spec/watirspec/alert_spec.rb +4 -21
- data/spec/watirspec/browser_spec.rb +2 -2
- data/spec/watirspec/cookies_spec.rb +1 -1
- data/spec/watirspec/elements/button_spec.rb +0 -10
- data/spec/watirspec/elements/checkbox_spec.rb +10 -22
- data/spec/watirspec/elements/div_spec.rb +4 -34
- data/spec/watirspec/elements/divs_spec.rb +2 -2
- data/spec/watirspec/elements/element_spec.rb +38 -84
- data/spec/watirspec/elements/form_spec.rb +2 -4
- data/spec/watirspec/elements/links_spec.rb +4 -4
- data/spec/watirspec/elements/select_list_spec.rb +7 -108
- data/spec/watirspec/elements/span_spec.rb +2 -2
- data/spec/watirspec/elements/spans_spec.rb +1 -1
- data/spec/watirspec/elements/strong_spec.rb +1 -1
- data/spec/watirspec/html/non_control_elements.html +8 -3
- data/spec/watirspec/support/rspec_matchers.rb +1 -32
- data/spec/watirspec/window_switching_spec.rb +2 -49
- data/spec/watirspec_helper.rb +6 -1
- data/watir.gemspec +3 -4
- metadata +11 -32
- data/.github/workflows/linux.yml +0 -61
- data/.github/workflows/mac.yml +0 -55
- data/.github/workflows/unit.yml +0 -37
- data/.github/workflows/windows.yml +0 -39
- data/lib/watir/legacy_wait.rb +0 -123
- data/spec/unit/container_spec.rb +0 -35
- data/spec/watirspec/legacy_wait_spec.rb +0 -216
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 994057876b1f2ad97972dfe3a43f139cf761aefabcacbc7ab1d2bc659693e70e
|
|
4
|
+
data.tar.gz: d0bcac18f0cfe6d9d2a0258bb57a8e2e9f0804feda5eeaf8e5d840fd859de3c4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b652878ab0a6b4365e3226a664945a86c96f8f94c6b0cd4744c0809a66d8fb49ff37951726699df217856d413d4104778164218ca365a1481ec6ab1212c2f12e
|
|
7
|
+
data.tar.gz: f6f5f093a6072f1456055853d2b93ce994b978897668eb3348ee6fe70fa872eea681c97481d254830f5d028cce0029bb9e45a5dd25d50d785a6e144592d429a2
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
name: All Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
- push
|
|
5
|
+
- pull_request
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
documentation-test:
|
|
9
|
+
name: Yard Doctest
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v2
|
|
13
|
+
- uses: ruby/setup-ruby@v1
|
|
14
|
+
with:
|
|
15
|
+
ruby-version: 2.6
|
|
16
|
+
- run: bundle install
|
|
17
|
+
- uses: ./.github/actions/install-chrome
|
|
18
|
+
- uses: ./.github/actions/setup-linux
|
|
19
|
+
- run: |
|
|
20
|
+
bundle exec rake yard:doctest
|
|
21
|
+
|
|
22
|
+
unit-test:
|
|
23
|
+
name: Unit Tests
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
strategy:
|
|
26
|
+
fail-fast: false
|
|
27
|
+
matrix:
|
|
28
|
+
ruby: ['2.5', '2.6', '2.7', '3.0']
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v2
|
|
31
|
+
- uses: ruby/setup-ruby@v1
|
|
32
|
+
with:
|
|
33
|
+
ruby-version: ${{ matrix.ruby }}
|
|
34
|
+
- run: bundle install
|
|
35
|
+
- uses: ./.github/actions/install-chrome
|
|
36
|
+
- uses: ./.github/actions/setup-linux
|
|
37
|
+
- run: |
|
|
38
|
+
bundle exec rake spec:unit
|
|
39
|
+
env:
|
|
40
|
+
DISPLAY: :99
|
|
41
|
+
|
|
42
|
+
linter-test:
|
|
43
|
+
name: Rubocop Tests
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v2
|
|
47
|
+
- uses: ruby/setup-ruby@v1
|
|
48
|
+
with:
|
|
49
|
+
ruby-version: 2.6
|
|
50
|
+
- run: bundle install
|
|
51
|
+
- run: bundle exec rubocop
|
|
52
|
+
|
|
53
|
+
local-tests:
|
|
54
|
+
name: Local Tests
|
|
55
|
+
runs-on: ${{ matrix.os }}
|
|
56
|
+
strategy:
|
|
57
|
+
fail-fast: false
|
|
58
|
+
matrix:
|
|
59
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
60
|
+
ruby: [ 2.6, 3.0 ]
|
|
61
|
+
task: [ chrome, firefox, edge ]
|
|
62
|
+
include:
|
|
63
|
+
- os: 'macos-latest'
|
|
64
|
+
task: 'safari'
|
|
65
|
+
ruby: 2.6
|
|
66
|
+
- os: 'macos-latest'
|
|
67
|
+
task: 'safari'
|
|
68
|
+
ruby: 3.0
|
|
69
|
+
# - os: 'windows-latest'
|
|
70
|
+
# task: 'ie'
|
|
71
|
+
exclude:
|
|
72
|
+
- os: 'ubuntu-latest'
|
|
73
|
+
task: 'edge'
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@v2
|
|
76
|
+
- uses: ./.github/actions/install-chrome
|
|
77
|
+
if: |
|
|
78
|
+
matrix.task == 'chrome' &&
|
|
79
|
+
matrix.os == 'ubuntu-latest'
|
|
80
|
+
- uses: ./.github/actions/setup-linux
|
|
81
|
+
if: matrix.os == 'ubuntu-latest'
|
|
82
|
+
- uses: browser-actions/setup-firefox@latest
|
|
83
|
+
with:
|
|
84
|
+
firefox-version: '86.0'
|
|
85
|
+
if: matrix.task == 'firefox'
|
|
86
|
+
- uses: ./.github/actions/enable-safari
|
|
87
|
+
if: matrix.task == 'safari'
|
|
88
|
+
- run: |
|
|
89
|
+
echo "COVERAGE=true" >> $GITHUB_ENV
|
|
90
|
+
if: |
|
|
91
|
+
matrix.os == 'ubuntu-latest' ||
|
|
92
|
+
matrix.os == 'macos-latest'
|
|
93
|
+
- uses: ruby/setup-ruby@v1
|
|
94
|
+
with:
|
|
95
|
+
ruby-version: ${{ matrix.ruby }}
|
|
96
|
+
- run: bundle install
|
|
97
|
+
- run: |
|
|
98
|
+
bundle exec rake spec:${{ matrix.task }}
|
|
99
|
+
env:
|
|
100
|
+
DISPLAY: :99
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
Watir Powered By Selenium!
|
|
4
4
|
|
|
5
5
|
[](http://badge.fury.io/rb/watir)
|
|
6
|
-
[](https://github.com/watir/watir/actions?query=workflow%3A%22Mac+Tests%22)
|
|
8
|
-
[](https://github.com/watir/watir/actions?query=workflow%3A%22Windows+Tests%22)
|
|
9
|
-
[](https://github.com/watir/watir/actions?query=workflow%3A%22Linux+Tests%22)
|
|
6
|
+
[](https://github.com/watir/watir/actions/workflows/tests.yml)
|
|
10
7
|
[](https://codeclimate.com/github/watir/watir)
|
|
11
8
|
[](https://coveralls.io/github/watir/watir?branch=main)
|
|
12
9
|
|
data/Rakefile
CHANGED
|
@@ -25,7 +25,7 @@ end
|
|
|
25
25
|
|
|
26
26
|
{
|
|
27
27
|
html: 'https://www.w3.org/TR/html52/single-page.html',
|
|
28
|
-
svg: '
|
|
28
|
+
svg: 'https://www.w3.org/TR/2018/CR-SVG2-20180807/single-page.html'
|
|
29
29
|
}.each do |type, spec_uri|
|
|
30
30
|
namespace type do
|
|
31
31
|
spec_path = "support/#{type}.html"
|
data/lib/watir.rb
CHANGED
|
@@ -2,7 +2,6 @@ require 'selenium-webdriver'
|
|
|
2
2
|
require 'time'
|
|
3
3
|
|
|
4
4
|
require 'watir/scroll'
|
|
5
|
-
require 'watir/legacy_wait'
|
|
6
5
|
require 'watir/wait'
|
|
7
6
|
require 'watir/exception'
|
|
8
7
|
require 'watir/window'
|
|
@@ -24,51 +23,8 @@ require 'watir/logger'
|
|
|
24
23
|
require 'watir/version'
|
|
25
24
|
|
|
26
25
|
module Watir
|
|
27
|
-
@relaxed_locate = true
|
|
28
|
-
|
|
29
26
|
class << self
|
|
30
|
-
attr_writer :
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
# Whether or not Watir should wait for an element to be found or present
|
|
34
|
-
# before taking an action.
|
|
35
|
-
# Defaults to true.
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
def relaxed_locate?
|
|
39
|
-
@relaxed_locate
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
#
|
|
43
|
-
# Whether or not Watir should re-locate a stale Element on use.
|
|
44
|
-
#
|
|
45
|
-
|
|
46
|
-
def always_locate?
|
|
47
|
-
always_locate_message
|
|
48
|
-
true
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def always_locate_message
|
|
52
|
-
msg = 'Watir#always_locate'
|
|
53
|
-
repl_msg = 'Element#stale? or Element#wait_until(&:stale?) if needed for flow control'
|
|
54
|
-
Watir.logger.deprecate msg, repl_msg, ids: [:always_locate]
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
#
|
|
58
|
-
# Whether or not Watir should prefer CSS when translating the Watir selector to Selenium.
|
|
59
|
-
#
|
|
60
|
-
|
|
61
|
-
def prefer_css?
|
|
62
|
-
prefer_css_message
|
|
63
|
-
false
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def prefer_css_message
|
|
67
|
-
msg = 'Watir#prefer_css'
|
|
68
|
-
repl_msg = 'watir_css gem - https://github.com/watir/watir_css'
|
|
69
|
-
|
|
70
|
-
Watir.logger.deprecate msg, repl_msg, ids: [:prefer_css]
|
|
71
|
-
end
|
|
27
|
+
attr_writer :default_timeout
|
|
72
28
|
|
|
73
29
|
#
|
|
74
30
|
# Default wait time for wait methods.
|
data/lib/watir/alert.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module Watir
|
|
2
2
|
class Alert
|
|
3
|
-
include EventuallyPresent
|
|
4
3
|
include Waitable
|
|
5
4
|
include Exception
|
|
6
5
|
|
|
@@ -104,13 +103,9 @@ module Watir
|
|
|
104
103
|
end
|
|
105
104
|
|
|
106
105
|
def wait_for_exists
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
wait_until(message: 'waiting for alert', &:exists?)
|
|
111
|
-
rescue Wait::TimeoutError
|
|
112
|
-
raise UnknownObjectException, 'unable to locate alert'
|
|
113
|
-
end
|
|
106
|
+
wait_until(message: 'waiting for alert', &:exists?)
|
|
107
|
+
rescue Wait::TimeoutError
|
|
108
|
+
raise UnknownObjectException, 'unable to locate alert'
|
|
114
109
|
end
|
|
115
110
|
end # Alert
|
|
116
111
|
end # Watir
|
data/lib/watir/capabilities.rb
CHANGED
|
@@ -11,14 +11,14 @@ module Watir
|
|
|
11
11
|
@options = options.dup
|
|
12
12
|
Watir.logger.info "Creating Browser instance of #{browser} with user provided options: #{@options.inspect}"
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
if @options.key?(:capabilities) && @options.key?(:options)
|
|
15
|
+
raise(ArgumentError, ':capabilities and :options are not both allowed')
|
|
16
|
+
end
|
|
17
|
+
raise(ArgumentError, ':url and :service are not both allowed') if @options.key?(:service) && @options.key?(:url)
|
|
17
18
|
|
|
18
|
-
@browser =
|
|
19
|
+
@browser = browser.nil? && infer_browser || browser
|
|
19
20
|
|
|
20
|
-
@selenium_browser = options
|
|
21
|
-
@selenium_opts = {}
|
|
21
|
+
@selenium_browser = @options.key?(:url) ? :remote : @browser
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def to_args
|
|
@@ -28,270 +28,94 @@ module Watir
|
|
|
28
28
|
private
|
|
29
29
|
|
|
30
30
|
def process_arguments
|
|
31
|
-
|
|
31
|
+
selenium_opts = {}
|
|
32
|
+
selenium_opts[:listener] = @options.delete(:listener) if @options.key?(:listener)
|
|
32
33
|
|
|
33
34
|
if @options.key?(:url)
|
|
34
|
-
|
|
35
|
+
selenium_opts[:url] = @options.delete(:url)
|
|
35
36
|
else
|
|
36
|
-
process_service
|
|
37
|
+
service = process_service
|
|
38
|
+
selenium_opts[:service] = service if service
|
|
37
39
|
end
|
|
38
40
|
|
|
39
|
-
process_http_client
|
|
40
|
-
process_browser_options
|
|
41
|
-
process_capabilities
|
|
42
|
-
Watir.logger.info "Creating Browser instance with Watir processed options: #{@selenium_opts.inspect}"
|
|
41
|
+
selenium_opts[:http_client] = process_http_client
|
|
42
|
+
selenium_opts[:capabilities] = @options.delete(:capabilities) || process_browser_options
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Watir.logger.info "Creating Browser instance with Watir processed options: #{selenium_opts.inspect}"
|
|
45
|
+
selenium_opts
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
def process_http_client
|
|
48
49
|
http_client = @options.delete(:http_client) || Watir::HttpClient.new
|
|
49
|
-
if http_client.is_a?(Hash)
|
|
50
|
-
http_client = Watir::HttpClient.new(http_client)
|
|
51
|
-
elsif !http_client.is_a?(Selenium::WebDriver::Remote::Http::Common)
|
|
52
|
-
raise TypeError, ':http_client must be a Hash or a Selenium HTTP Client instance'
|
|
53
|
-
end
|
|
54
50
|
|
|
55
|
-
|
|
51
|
+
case http_client
|
|
52
|
+
when Hash
|
|
53
|
+
Watir::HttpClient.new(**http_client)
|
|
54
|
+
when Watir::HttpClient
|
|
55
|
+
http_client
|
|
56
|
+
when Selenium::WebDriver::Remote::Http::Common
|
|
56
57
|
Watir.logger.warn 'Check out the new Watir::HttpClient and let us know if there are missing features you need',
|
|
57
58
|
ids: [:watir_client]
|
|
59
|
+
http_client
|
|
60
|
+
else
|
|
61
|
+
raise TypeError, ':http_client must be a Hash or a Selenium HTTP Client instance'
|
|
58
62
|
end
|
|
59
|
-
|
|
60
|
-
process_http_client_timeouts(http_client)
|
|
61
|
-
@selenium_opts[:http_client] = http_client
|
|
62
63
|
end
|
|
63
64
|
|
|
64
65
|
def process_browser_options
|
|
65
66
|
browser_options = @options.delete(:options) || {}
|
|
66
|
-
process_w3c_capabilities(browser_options)
|
|
67
|
-
|
|
68
|
-
case @browser
|
|
69
|
-
when :chrome
|
|
70
|
-
process_chrome_options(browser_options)
|
|
71
|
-
when :firefox
|
|
72
|
-
process_firefox_options(browser_options)
|
|
73
|
-
when :safari
|
|
74
|
-
process_safari_options(browser_options)
|
|
75
|
-
when :ie, :internet_explorer
|
|
76
|
-
process_ie_options(browser_options)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def process_capabilities
|
|
81
|
-
caps = @options.delete(:capabilities)
|
|
82
|
-
|
|
83
|
-
unless @options.empty?
|
|
84
|
-
Watir.logger.deprecate('passing unrecognized arguments into Browser constructor',
|
|
85
|
-
'appropriate keyword to nest all arguments',
|
|
86
|
-
ids: %i[unknown_keyword capabilities],
|
|
87
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
if caps
|
|
91
|
-
@selenium_opts.merge!(@options)
|
|
92
|
-
else
|
|
93
|
-
caps = Selenium::WebDriver::Remote::Capabilities.send @browser, @options.merge(@w3c_caps)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
@selenium_opts[:desired_capabilities] = caps
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def deprecate_desired_capabilities
|
|
100
|
-
return unless @options.key?(:desired_capabilities)
|
|
101
|
-
|
|
102
|
-
Watir.logger.deprecate(':desired_capabilities to initialize Browser',
|
|
103
|
-
':capabilities or preferably :options',
|
|
104
|
-
ids: [:desired_capabilities],
|
|
105
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
106
|
-
@options[:capabilities] = @options.delete(:desired_capabilities)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def deprecate_url_service
|
|
110
|
-
Watir.logger.deprecate('allowing Browser initialization with both :url & :service',
|
|
111
|
-
'just :service',
|
|
112
|
-
ids: [:url_service],
|
|
113
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def process_http_client_timeouts(http_client)
|
|
117
|
-
deprecate_client_timeout(http_client) if @options.key? :client_timeout
|
|
118
|
-
deprecate_open_timeout(http_client) if @options.key? :open_timeout
|
|
119
|
-
deprecate_read_timeout(http_client) if @options.key? :read_timeout
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def deprecate_client_timeout(http_client)
|
|
123
|
-
Watir.logger.deprecate(':client_timeout to initialize Browser',
|
|
124
|
-
':open_timeout and/or :read_timeout in a Hash with :http_client key',
|
|
125
|
-
ids: [:http_client_timeout],
|
|
126
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
127
|
-
timeout = @options.delete(:client_timeout)
|
|
128
|
-
http_client.open_timeout = timeout
|
|
129
|
-
http_client.read_timeout = timeout
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def deprecate_open_timeout(http_client)
|
|
133
|
-
Watir.logger.deprecate(':open_timeout to initialize Browser',
|
|
134
|
-
':open_timeout in a Hash with :http_client key',
|
|
135
|
-
ids: %i[http_open_timeout capabilities],
|
|
136
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
137
|
-
http_client.open_timeout = @options.delete(:open_timeout)
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
def deprecate_read_timeout(http_client)
|
|
141
|
-
Watir.logger.deprecate(':read_timeout to initialize Browser',
|
|
142
|
-
':read_timeout in a Hash with :http_client key',
|
|
143
|
-
ids: %i[http_read_timeout capabilities],
|
|
144
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
145
|
-
http_client.read_timeout = @options.delete(:read_timeout)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def process_chrome_options(browser_options)
|
|
149
|
-
@selenium_opts[:options] = browser_options if browser_options.is_a? Selenium::WebDriver::Chrome::Options
|
|
150
|
-
@selenium_opts[:options] ||= Selenium::WebDriver::Chrome::Options.new(**browser_options)
|
|
151
67
|
|
|
152
|
-
|
|
68
|
+
options = browser_options if browser_options.is_a? Selenium::WebDriver::Options
|
|
69
|
+
options ||= Selenium::WebDriver::Options.send(@browser, **browser_options)
|
|
153
70
|
|
|
154
|
-
|
|
71
|
+
browser_specific_options(options)
|
|
72
|
+
raise ArgumentError, "#{@options} are unrecognized arguments for Browser constructor" unless @options.empty?
|
|
155
73
|
|
|
156
|
-
|
|
157
|
-
@selenium_opts[:options].args << '--disable-gpu'
|
|
74
|
+
options
|
|
158
75
|
end
|
|
159
76
|
|
|
160
|
-
def
|
|
161
|
-
@
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
77
|
+
def browser_specific_options(options)
|
|
78
|
+
case @browser
|
|
79
|
+
when :chrome, :edge, :microsoftedge
|
|
80
|
+
if @options.delete(:headless)
|
|
81
|
+
options.args << '--headless'
|
|
82
|
+
options.args << '--disable-gpu'
|
|
83
|
+
options.args << '--no-sandbox'
|
|
84
|
+
end
|
|
85
|
+
when :firefox
|
|
86
|
+
options.headless! if @options.delete(:headless)
|
|
87
|
+
when :safari
|
|
88
|
+
Selenium::WebDriver::Safari.technology_preview! if @options.delete(:technology_preview)
|
|
170
89
|
end
|
|
171
|
-
|
|
172
|
-
@selenium_opts[:options].args << '--headless' if @options.delete(:headless)
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def process_safari_options(browser_options)
|
|
176
|
-
@selenium_opts[:options] = browser_options if browser_options.is_a? Selenium::WebDriver::Safari::Options
|
|
177
|
-
@selenium_opts[:options] ||= Selenium::WebDriver::Safari::Options.new(**browser_options)
|
|
178
|
-
Selenium::WebDriver::Safari.technology_preview! if @options.delete(:technology_preview)
|
|
179
90
|
end
|
|
180
91
|
|
|
181
|
-
def
|
|
182
|
-
|
|
183
|
-
@selenium_opts[:options] ||= Selenium::WebDriver::IE::Options.new(**browser_options)
|
|
92
|
+
def process_service
|
|
93
|
+
service = @options.delete(:service)
|
|
184
94
|
|
|
185
|
-
|
|
186
|
-
|
|
95
|
+
case service
|
|
96
|
+
when nil
|
|
97
|
+
nil
|
|
98
|
+
when Hash
|
|
99
|
+
return if service.empty?
|
|
187
100
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
return if service.empty?
|
|
194
|
-
|
|
195
|
-
Selenium::WebDriver::Service.send(@browser, service)
|
|
196
|
-
when Selenium::WebDriver::Service
|
|
197
|
-
service
|
|
198
|
-
else
|
|
199
|
-
raise TypeError, "#{service} needs to be Selenium Service or Hash instance"
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
def deprecate_service_keywords
|
|
204
|
-
service = {}
|
|
205
|
-
if @options.key?(:port)
|
|
206
|
-
Watir.logger.deprecate(':port to initialize Browser',
|
|
207
|
-
':port in a Hash with :service key',
|
|
208
|
-
ids: %i[port_keyword capabilities],
|
|
209
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
210
|
-
service[:port] = @options.delete(:port)
|
|
211
|
-
end
|
|
212
|
-
if @options.key?(:driver_opts)
|
|
213
|
-
Watir.logger.deprecate(':driver_opts to initialize Browser',
|
|
214
|
-
':args as Array in a Hash with :service key',
|
|
215
|
-
ids: %i[driver_opts_keyword capabilities],
|
|
216
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
217
|
-
service[:args] = @options.delete(:driver_opts)
|
|
101
|
+
Selenium::WebDriver::Service.send(@browser, **service)
|
|
102
|
+
when Selenium::WebDriver::Service
|
|
103
|
+
service
|
|
104
|
+
else
|
|
105
|
+
raise TypeError, "#{service} needs to be Selenium Service or Hash instance"
|
|
218
106
|
end
|
|
219
|
-
service
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
def process_args
|
|
223
|
-
args = if @options.key?(:args)
|
|
224
|
-
deprecate_args
|
|
225
|
-
@options.delete(:args)
|
|
226
|
-
elsif @options.key?(:switches)
|
|
227
|
-
deprecate_switches
|
|
228
|
-
@options.delete(:switches)
|
|
229
|
-
else
|
|
230
|
-
[]
|
|
231
|
-
end
|
|
232
|
-
args.each { |arg| @selenium_opts[:options].args << arg }
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
def deprecate_args
|
|
236
|
-
Watir.logger.deprecate(':args to initialize Browser',
|
|
237
|
-
':args inside Hash with :options key',
|
|
238
|
-
ids: %i[args_keyword capabilities],
|
|
239
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
def deprecate_switches
|
|
243
|
-
Watir.logger.deprecate(':switches to initialize Browser',
|
|
244
|
-
':switches inside Hash with :options key',
|
|
245
|
-
ids: %i[switches_keyword capabilities],
|
|
246
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
def deprecate_remote(browser)
|
|
250
|
-
return unless browser == :remote
|
|
251
|
-
|
|
252
|
-
Watir.logger.deprecate(':remote to initialize Browser',
|
|
253
|
-
'browser key along with remote url',
|
|
254
|
-
ids: %i[remote_keyword capabilities],
|
|
255
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
256
|
-
infer_browser
|
|
257
107
|
end
|
|
258
108
|
|
|
259
109
|
def infer_browser
|
|
260
110
|
if @options.key?(:browser)
|
|
261
111
|
@options.delete(:browser)
|
|
262
112
|
elsif @options.key?(:capabilities)
|
|
263
|
-
@options[:capabilities].browser_name.tr(' ', '_').to_sym
|
|
113
|
+
@options[:capabilities].browser_name.tr(' ', '_').downcase.to_sym
|
|
264
114
|
elsif @options.key?(:options)
|
|
265
115
|
@options[:options].class.to_s.split('::')[-2].downcase.to_sym
|
|
266
116
|
else
|
|
267
117
|
:chrome
|
|
268
118
|
end
|
|
269
119
|
end
|
|
270
|
-
|
|
271
|
-
def process_w3c_capabilities(opts)
|
|
272
|
-
@w3c_caps = {}
|
|
273
|
-
return unless opts.is_a?(Hash)
|
|
274
|
-
|
|
275
|
-
w3c_keys = %i[browser_version platform_name accept_insecure_certs page_load_strategy proxy set_window_rect
|
|
276
|
-
timeouts unhandled_prompt_behavior strict_file_interactibility]
|
|
277
|
-
|
|
278
|
-
opts.each do |key, _val|
|
|
279
|
-
next unless key.to_s.include?(':') || w3c_keys.include?(key)
|
|
280
|
-
|
|
281
|
-
@w3c_caps[key] = opts.delete(key)
|
|
282
|
-
end
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
def deprecate_options_capabilities
|
|
286
|
-
return unless @options.key?(:capabilities) && @options.key?(:options)
|
|
287
|
-
|
|
288
|
-
old = 'initializing Browser with both options and capabilities'
|
|
289
|
-
new = 'Hash with :options, Selenium Options instance with :options or' \
|
|
290
|
-
'Selenium Capabilities instance with :capabilities'
|
|
291
|
-
Watir.logger.deprecate(old,
|
|
292
|
-
new,
|
|
293
|
-
ids: %i[options_capabilities capabilities],
|
|
294
|
-
reference: 'http://watir.com/guides/capabilities.html')
|
|
295
|
-
end
|
|
296
120
|
end
|
|
297
121
|
end
|