watir 6.17.0 → 7.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/actions/enable-safari/action.yml +11 -0
- data/.github/actions/install-chrome/action.yml +12 -0
- data/.github/actions/setup-linux/action.yml +8 -0
- data/.github/workflows/chrome.yml +34 -0
- data/.github/workflows/edge.yml +28 -0
- data/.github/workflows/firefox.yml +35 -0
- data/.github/workflows/ie.yml +24 -0
- data/.github/workflows/safari.yml +27 -0
- data/.github/workflows/unit.yml +52 -0
- data/.rubocop.yml +3 -8
- data/.rubocop_todo.yml +36 -0
- data/CHANGES.md +91 -0
- data/LICENSE +2 -2
- data/README.md +6 -10
- data/Rakefile +2 -2
- data/lib/watir/adjacent.rb +1 -1
- data/lib/watir/alert.rb +4 -8
- data/lib/watir/attribute_helper.rb +3 -1
- data/lib/watir/browser.rb +23 -9
- data/lib/watir/capabilities.rb +120 -106
- data/lib/watir/cell_container.rb +4 -4
- data/lib/watir/container.rb +4 -26
- data/lib/watir/cookies.rb +2 -0
- data/lib/watir/element_collection.rb +21 -6
- data/lib/watir/elements/checkbox.rb +4 -4
- data/lib/watir/elements/date_field.rb +8 -5
- data/lib/watir/elements/date_time_field.rb +8 -5
- data/lib/watir/elements/element.rb +85 -67
- data/lib/watir/elements/file_field.rb +4 -4
- data/lib/watir/elements/font.rb +5 -4
- data/lib/watir/elements/hidden.rb +4 -4
- data/lib/watir/elements/html_elements.rb +444 -446
- data/lib/watir/elements/iframe.rb +6 -6
- data/lib/watir/elements/radio.rb +6 -6
- data/lib/watir/elements/select.rb +62 -90
- data/lib/watir/elements/svg_elements.rb +96 -96
- data/lib/watir/elements/table.rb +1 -1
- 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 +22 -18
- data/lib/watir/http_client.rb +9 -0
- data/lib/watir/js_execution.rb +2 -2
- data/lib/watir/js_snippets/isElementInViewport.js +20 -0
- data/lib/watir/js_snippets.rb +2 -2
- 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/xpath.rb +37 -43
- data/lib/watir/locators/element/selector_builder.rb +3 -41
- data/lib/watir/locators/option/matcher.rb +24 -0
- data/lib/watir/locators/option/selector_builder/xpath.rb +37 -0
- data/lib/watir/locators/option/selector_builder.rb +8 -0
- data/lib/watir/locators.rb +6 -8
- data/lib/watir/logger.rb +4 -91
- data/lib/watir/radio_set.rb +5 -4
- data/lib/watir/row_container.rb +4 -4
- data/lib/watir/screenshot.rb +2 -8
- data/lib/watir/scroll.rb +2 -1
- data/lib/watir/user_editable.rb +13 -2
- data/lib/watir/version.rb +1 -1
- data/lib/watir/wait/timer.rb +1 -1
- data/lib/watir/wait.rb +6 -74
- data/lib/watir/window.rb +46 -25
- data/lib/watir/window_collection.rb +79 -0
- data/lib/watir.rb +4 -45
- data/lib/watirspec/guards.rb +1 -1
- data/lib/watirspec/implementation.rb +7 -5
- data/lib/watirspec/remote_server.rb +2 -6
- data/lib/watirspec/runner.rb +2 -2
- data/lib/watirspec/server.rb +2 -2
- data/lib/watirspec.rb +5 -2
- data/spec/spec_helper.rb +1 -21
- data/spec/unit/capabilities_spec.rb +654 -21
- data/spec/unit/match_elements/button_spec.rb +0 -13
- data/spec/unit/match_elements/element_spec.rb +55 -51
- 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/unit/unit_helper.rb +2 -4
- data/spec/watirspec/after_hooks_spec.rb +23 -44
- data/spec/watirspec/alert_spec.rb +4 -21
- data/spec/watirspec/browser_spec.rb +186 -206
- data/spec/watirspec/cookies_spec.rb +47 -52
- data/spec/watirspec/drag_and_drop_spec.rb +17 -7
- data/spec/watirspec/elements/area_spec.rb +1 -5
- data/spec/watirspec/elements/button_spec.rb +4 -18
- data/spec/watirspec/elements/checkbox_spec.rb +10 -24
- data/spec/watirspec/elements/date_field_spec.rb +13 -16
- data/spec/watirspec/elements/date_time_field_spec.rb +11 -13
- data/spec/watirspec/elements/dd_spec.rb +3 -4
- data/spec/watirspec/elements/del_spec.rb +10 -12
- data/spec/watirspec/elements/div_spec.rb +56 -84
- data/spec/watirspec/elements/divs_spec.rb +2 -2
- data/spec/watirspec/elements/dl_spec.rb +4 -12
- data/spec/watirspec/elements/element_spec.rb +283 -187
- data/spec/watirspec/elements/elements_spec.rb +8 -9
- data/spec/watirspec/elements/filefield_spec.rb +5 -7
- data/spec/watirspec/elements/form_spec.rb +3 -5
- data/spec/watirspec/elements/forms_spec.rb +3 -5
- data/spec/watirspec/elements/frame_spec.rb +17 -22
- data/spec/watirspec/elements/iframe_spec.rb +25 -33
- data/spec/watirspec/elements/ins_spec.rb +10 -12
- data/spec/watirspec/elements/link_spec.rb +23 -23
- data/spec/watirspec/elements/links_spec.rb +8 -9
- data/spec/watirspec/elements/radio_spec.rb +11 -14
- data/spec/watirspec/elements/select_list_spec.rb +358 -209
- data/spec/watirspec/elements/span_spec.rb +12 -14
- data/spec/watirspec/elements/spans_spec.rb +1 -1
- data/spec/watirspec/elements/strong_spec.rb +1 -1
- data/spec/watirspec/elements/table_nesting_spec.rb +31 -34
- data/spec/watirspec/elements/table_spec.rb +11 -13
- data/spec/watirspec/elements/tbody_spec.rb +10 -12
- data/spec/watirspec/elements/td_spec.rb +4 -6
- data/spec/watirspec/elements/text_field_spec.rb +10 -12
- data/spec/watirspec/elements/tr_spec.rb +5 -7
- data/spec/watirspec/html/non_control_elements.html +8 -3
- data/spec/watirspec/html/scroll.html +8 -25
- data/spec/watirspec/html/special_chars.html +3 -0
- data/spec/watirspec/html/sticky_elements.html +10 -0
- data/spec/watirspec/html/wait.html +5 -5
- data/spec/watirspec/html/window_switching.html +10 -0
- data/spec/watirspec/scroll_spec.rb +72 -42
- data/spec/watirspec/special_chars_spec.rb +10 -0
- data/spec/watirspec/support/rspec_matchers.rb +11 -24
- data/spec/watirspec/user_editable_spec.rb +26 -28
- data/spec/watirspec/wait_spec.rb +154 -201
- data/spec/watirspec/window_switching_spec.rb +385 -270
- data/spec/watirspec_helper.rb +54 -49
- data/support/doctest_helper.rb +0 -2
- data/watir.gemspec +5 -6
- metadata +38 -41
- data/.travis.yml +0 -87
- data/appveyor.yml +0 -13
- data/lib/watir/legacy_wait.rb +0 -123
- data/spec/implementation_spec.rb +0 -24
- data/spec/unit/container_spec.rb +0 -35
- data/spec/unit/logger_spec.rb +0 -81
- data/spec/watirspec/html/hover.html +0 -12
- data/spec/watirspec/relaxed_locate_spec.rb +0 -109
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8a3f59dcd9f56e63cf532cc2ba8c9605e8ffad78bd59d3f104e6677c9f5e20c
|
4
|
+
data.tar.gz: 1f1cb55a4270ebdce957f4a8dc33e76403eef391ed59e3179f4f6772595d3f59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 488c6b2f0a93a20390350da8b95025f9e33d2be9bb7bd84b130808906bca067860b3db6908c59961ef3914ccbb682d2d15d2418656749f8916a1416fa8c6cbb5
|
7
|
+
data.tar.gz: 64bc4a7b36c294a75ceb86c3fea21809dbefc158cbca08ba72dc6bf7b3b64d76f04b5c02130a8cce15e78d5156659cb317ee397e27d93d06e537e804695e425b
|
@@ -0,0 +1,11 @@
|
|
1
|
+
name: 'Enable Safari Driver'
|
2
|
+
description: 'Set safaridriver to run in automation mode'
|
3
|
+
runs:
|
4
|
+
using: composite
|
5
|
+
steps:
|
6
|
+
- run: |
|
7
|
+
defaults write com.apple.Safari IncludeDevelopMenu YES
|
8
|
+
defaults write com.apple.Safari AllowRemoteAutomation 1
|
9
|
+
sudo safaridriver --enable
|
10
|
+
safaridriver -p 0 &
|
11
|
+
shell: bash
|
@@ -0,0 +1,12 @@
|
|
1
|
+
name: 'Install Chrome'
|
2
|
+
description: 'Install Chrome Stable'
|
3
|
+
runs:
|
4
|
+
using: "composite"
|
5
|
+
steps:
|
6
|
+
- run: |
|
7
|
+
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
|
8
|
+
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee -a /etc/apt/sources.list.d/google-chrome.list
|
9
|
+
sudo apt-get update -qqy
|
10
|
+
sudo apt-get -qqy install google-chrome-stable
|
11
|
+
sudo rm /etc/apt/sources.list.d/google-chrome.list
|
12
|
+
shell: bash
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: Chrome Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
- push
|
5
|
+
- pull_request
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
local-tests:
|
9
|
+
name: Local Tests
|
10
|
+
runs-on: ${{ matrix.os }}
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
15
|
+
ruby: [ 2.6, 3.0 ]
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- uses: ./.github/actions/setup-linux
|
19
|
+
if: matrix.os == 'ubuntu-latest'
|
20
|
+
- uses: ./.github/actions/install-chrome
|
21
|
+
if: matrix.os == 'ubuntu-latest'
|
22
|
+
- run: |
|
23
|
+
echo "COVERAGE=true" >> $GITHUB_ENV
|
24
|
+
if: |
|
25
|
+
matrix.os == 'ubuntu-latest' ||
|
26
|
+
matrix.os == 'macos-latest'
|
27
|
+
- uses: ruby/setup-ruby@v1
|
28
|
+
with:
|
29
|
+
ruby-version: ${{ matrix.ruby }}
|
30
|
+
- run: bundle install
|
31
|
+
- run: |
|
32
|
+
bundle exec rake spec:chrome
|
33
|
+
env:
|
34
|
+
DISPLAY: :99
|
@@ -0,0 +1,28 @@
|
|
1
|
+
name: Edge Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
- push
|
5
|
+
- pull_request
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
local-tests:
|
9
|
+
name: Local Tests
|
10
|
+
runs-on: ${{ matrix.os }}
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
os: [macos-latest, windows-latest]
|
15
|
+
ruby: [ 2.6, 3.0 ]
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- run: |
|
19
|
+
echo "COVERAGE=true" >> $GITHUB_ENV
|
20
|
+
if: matrix.os == 'macos-latest'
|
21
|
+
- uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby }}
|
24
|
+
- run: bundle install
|
25
|
+
- run: |
|
26
|
+
bundle exec rake spec:edge
|
27
|
+
env:
|
28
|
+
DISPLAY: :99
|
@@ -0,0 +1,35 @@
|
|
1
|
+
name: Firefox Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
- push
|
5
|
+
- pull_request
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
local-tests:
|
9
|
+
name: Local Tests
|
10
|
+
runs-on: ${{ matrix.os }}
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
15
|
+
ruby: [ 2.6, 3.0 ]
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- uses: ./.github/actions/setup-linux
|
19
|
+
if: matrix.os == 'ubuntu-latest'
|
20
|
+
- uses: browser-actions/setup-firefox@latest
|
21
|
+
with:
|
22
|
+
firefox-version: '93.0'
|
23
|
+
- run: |
|
24
|
+
echo "COVERAGE=true" >> $GITHUB_ENV
|
25
|
+
if: |
|
26
|
+
matrix.os == 'ubuntu-latest' ||
|
27
|
+
matrix.os == 'macos-latest'
|
28
|
+
- uses: ruby/setup-ruby@v1
|
29
|
+
with:
|
30
|
+
ruby-version: ${{ matrix.ruby }}
|
31
|
+
- run: bundle install
|
32
|
+
- run: |
|
33
|
+
bundle exec rake spec:firefox
|
34
|
+
env:
|
35
|
+
DISPLAY: :99
|
@@ -0,0 +1,24 @@
|
|
1
|
+
name: IE Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
- push
|
5
|
+
- pull_request
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
local-tests:
|
9
|
+
name: Local Tests
|
10
|
+
runs-on: windows-latest
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
ruby: [ 2.6, 3.0 ]
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@v2
|
17
|
+
- uses: ruby/setup-ruby@v1
|
18
|
+
with:
|
19
|
+
ruby-version: ${{ matrix.ruby }}
|
20
|
+
- run: bundle install
|
21
|
+
- run: |
|
22
|
+
bundle exec rake spec:ie
|
23
|
+
env:
|
24
|
+
DISPLAY: :99
|
@@ -0,0 +1,27 @@
|
|
1
|
+
name: Safari Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
- push
|
5
|
+
- pull_request
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
local-tests:
|
9
|
+
name: Local Tests
|
10
|
+
runs-on: macos-latest
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
ruby: [ 2.6, 3.0 ]
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@v2
|
17
|
+
- uses: ./.github/actions/enable-safari
|
18
|
+
- run: |
|
19
|
+
echo "COVERAGE=true" >> $GITHUB_ENV
|
20
|
+
- uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: ${{ matrix.ruby }}
|
23
|
+
- run: bundle install
|
24
|
+
- run: |
|
25
|
+
bundle exec rake spec:safari
|
26
|
+
env:
|
27
|
+
DISPLAY: :99
|
@@ -0,0 +1,52 @@
|
|
1
|
+
name: Unit 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
|
+
|
23
|
+
unit-test:
|
24
|
+
name: Unit Tests
|
25
|
+
runs-on: ubuntu-latest
|
26
|
+
strategy:
|
27
|
+
fail-fast: false
|
28
|
+
matrix:
|
29
|
+
ruby: ['2.6', '2.7', '3.0']
|
30
|
+
steps:
|
31
|
+
- uses: actions/checkout@v2
|
32
|
+
- uses: ruby/setup-ruby@v1
|
33
|
+
with:
|
34
|
+
ruby-version: ${{ matrix.ruby }}
|
35
|
+
- run: bundle install
|
36
|
+
- uses: ./.github/actions/install-chrome
|
37
|
+
- uses: ./.github/actions/setup-linux
|
38
|
+
- run: |
|
39
|
+
bundle exec rake spec:unit
|
40
|
+
env:
|
41
|
+
DISPLAY: :99
|
42
|
+
|
43
|
+
linter-test:
|
44
|
+
name: Rubocop Tests
|
45
|
+
runs-on: ubuntu-latest
|
46
|
+
steps:
|
47
|
+
- uses: actions/checkout@v2
|
48
|
+
- uses: ruby/setup-ruby@v1
|
49
|
+
with:
|
50
|
+
ruby-version: 2.6
|
51
|
+
- run: bundle install
|
52
|
+
- run: bundle exec rubocop
|
data/.rubocop.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
2
2
|
|
3
3
|
AllCops:
|
4
|
-
TargetRubyVersion: 2.
|
4
|
+
TargetRubyVersion: 2.6.8
|
5
5
|
NewCops: enable
|
6
6
|
Exclude:
|
7
7
|
- 'lib/watir/elements/html_elements.rb'
|
@@ -19,17 +19,12 @@ Lint/UnifiedInteger:
|
|
19
19
|
|
20
20
|
# Default: 17
|
21
21
|
Metrics/AbcSize:
|
22
|
-
Max:
|
22
|
+
Max: 22
|
23
23
|
Exclude:
|
24
|
-
- 'lib/watir/capabilities.rb'
|
25
24
|
- 'lib/watir/locators/element/selector_builder.rb'
|
26
|
-
- 'lib/watir/locators/element/selector_builder
|
27
|
-
- 'lib/watir/locators/element/selector_builder/xpath.rb'
|
28
|
-
- 'lib/watir/locators/element/locator.rb'
|
25
|
+
- 'lib/watir/locators/element/selector_builder/*.rb'
|
29
26
|
- 'lib/watir/generator/base/generator.rb'
|
30
|
-
- 'lib/watir/generator/base/visitor.rb'
|
31
27
|
- 'spec/locator_spec_helper.rb'
|
32
|
-
- 'spec/watirspec_helper.rb'
|
33
28
|
|
34
29
|
Metrics/BlockLength:
|
35
30
|
Exclude:
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2020-08-27 01:55:04 UTC using RuboCop version 0.89.1.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 116
|
10
|
+
Style/Documentation:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
# Offense count: 11
|
14
|
+
# Configuration parameters: EnforcedStyle.
|
15
|
+
# SupportedStyles: annotated, template, unannotated
|
16
|
+
Style/FormatStringToken:
|
17
|
+
Exclude:
|
18
|
+
- 'lib/watir/browser.rb'
|
19
|
+
- 'lib/watir/window.rb'
|
20
|
+
|
21
|
+
# Offense count: 229
|
22
|
+
# Cop supports --auto-correct.
|
23
|
+
# Configuration parameters: EnforcedStyle.
|
24
|
+
# SupportedStyles: always, always_true, never
|
25
|
+
Style/FrozenStringLiteralComment:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
# Remove for Watir 7
|
29
|
+
Naming/FileName:
|
30
|
+
Exclude:
|
31
|
+
- 'lib/watir-webdriver.rb'
|
32
|
+
|
33
|
+
# Fix in Watir 7
|
34
|
+
Metrics/ParameterLists:
|
35
|
+
Exclude:
|
36
|
+
- 'lib/watir/wait.rb'
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,94 @@
|
|
1
|
+
### 7.1.0 (2021-11-15)
|
2
|
+
|
3
|
+
* Add automatic scroll to `Element#click` with method parameters to ensure element is in viewport
|
4
|
+
* Provide `:scroll_to` parameter for element methods implemented with `Actions` class (thanks osadasami #948, #949)
|
5
|
+
* Allow `:scroll_to` parameter to accept `nil` argument to avoid automatic scrolling
|
6
|
+
* Implement `Element#in_viewport?`
|
7
|
+
* Fix but where `Scroll#to` for `Browser` with `:center` argument did not scroll to center of page
|
8
|
+
* Change `Element#obscured?` to only scroll when element out of viewport and then scroll to bottom instead of top
|
9
|
+
|
10
|
+
### 7.0.0 (2021-10-18)
|
11
|
+
|
12
|
+
* Requires Selenium 4.0.0+
|
13
|
+
* Requires Ruby 2.6+
|
14
|
+
* Implement `Window#minimize`
|
15
|
+
* Implement `Window#full_screen`
|
16
|
+
|
17
|
+
### 7.0.0.beta5 (2021-08-02)
|
18
|
+
|
19
|
+
* Add support for passing in Proxy and proxy Hash to Capabilities (#933)
|
20
|
+
* Trigger change event when setting values on date and date-time fields (#938)
|
21
|
+
* Allow user to obtain Capabilities instance from Browser instance
|
22
|
+
|
23
|
+
### 7.0.0.beta4 (2021-05-29)
|
24
|
+
|
25
|
+
* Fix Bug in using negative class names within a collection (#934)
|
26
|
+
|
27
|
+
### 7.0.0.beta3 (2021-05-05)
|
28
|
+
|
29
|
+
* Fix Bug preventing proper use of vendor extension capabilities
|
30
|
+
* Changed how timeouts are supported in Watir Capabilities (#932)
|
31
|
+
* Changed the default Alert Behavior not to automatically get dismissed when an exception happens (#931)
|
32
|
+
|
33
|
+
### 7.0.0.beta2 (2021-03-28)
|
34
|
+
|
35
|
+
* Replace Watir Logger implementation with Selenium Logger subclass
|
36
|
+
* Change Watir Guards to use Selenium's new Guards. Tests run as pending when guarded.
|
37
|
+
* Implement `#set` as standard interface for each Input Element (#405)
|
38
|
+
* Implement `Element#set` to take correct `#set` behavior based on evaluated element (#664)
|
39
|
+
* Optimize Performance for Select Lists (#846)
|
40
|
+
* Allow user to set values on Select List exclusively by `:label`, `:text`, or `:value` (#846)
|
41
|
+
* Allow user to check if option selected in Select List by `:label`, `:text`, or `:value` (#929)
|
42
|
+
* Implement `Window#restore!` to return to original Window and close all others (#923)
|
43
|
+
* Minor performance improvement for iterating over windows (#923)
|
44
|
+
* Implement `Browser#closed?`; same as `Browser#exists?` without the Windows checks (#923)
|
45
|
+
* Update methods that use Selenium's Actions class to scroll element into view before acting (#847)
|
46
|
+
* Fix bug for `:text` locator with `Regexp` value based on whitespace (#924)
|
47
|
+
* Remove executing after hooks when changing frames (#888)
|
48
|
+
|
49
|
+
### 7.0.0.beta1 (2021-03-18)
|
50
|
+
|
51
|
+
* Requires Selenium 4
|
52
|
+
* Supports Ruby 3
|
53
|
+
* Add support for Microsoft Edge Chromium
|
54
|
+
* Remove support for all deprecated functionality
|
55
|
+
|
56
|
+
### 6.19.1 (2021-03-17)
|
57
|
+
|
58
|
+
* Fix bug preventing using Selenium 4
|
59
|
+
* Fix bug preventing non-xml characters in attributes (#787)
|
60
|
+
|
61
|
+
### 6.19.0 (2021-03-12)
|
62
|
+
|
63
|
+
* Create custom Watir HTTP Client
|
64
|
+
* Require minimum of Selenium 3.142.7
|
65
|
+
* Add support for starting browser with :http_client and :service hashes
|
66
|
+
* Allow inferring desired browser from Capabilities or Options if browser not specified
|
67
|
+
* Deprecate WindowCollection#to_a method
|
68
|
+
* Deprecate starting browser with both Capabilities and Options
|
69
|
+
* Deprecate starting browser with both URL and Service
|
70
|
+
* Deprecate using :desired_capabilities
|
71
|
+
* Deprecate starting browser service keywords in top level Hash
|
72
|
+
* Deprecate using :remote to start a browser; browser name must be specified
|
73
|
+
* Deprecate sending unknown keywords into the top level
|
74
|
+
* Fix bug preventing Safari Options from being recognized
|
75
|
+
* Fix bug preventing options provided without :remote keyword from being properly recognized (#812, #870)
|
76
|
+
* Fix bug preventing :headless from being recognized when :options specified (#692)
|
77
|
+
|
78
|
+
### 6.18.0 (2021-02-26)
|
79
|
+
|
80
|
+
* Implement `WindowCollection` to manage multiple `Window` objects
|
81
|
+
* Add support for locating `Window` by `:element`
|
82
|
+
* Deprecate locating `Window` by `:index`
|
83
|
+
* Deprecate `Select#select_all` in favor of `#select` and an `Array`
|
84
|
+
* Implement `Browser#switch_window` (#849)
|
85
|
+
* Add support for `Numeric` attribute values to `Waitable`
|
86
|
+
* Allow users to specify Selenium 4 in their projects
|
87
|
+
* Update stale element handling behavior to match webdriver spec (#905 #909)
|
88
|
+
* Implement `Waitable` for `ElementCollection` (#853 #857)
|
89
|
+
* Improve performance for nested elements (#843)
|
90
|
+
* Less strict version check for `regexp_parser` gem (thanks Pavel Lobashov)
|
91
|
+
|
1
92
|
### 6.17.0 (2020-08-27)
|
2
93
|
* Require Ruby > 2.5
|
3
94
|
* Implement Logger#selenium= to set selenium level from Watir
|
data/LICENSE
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
(the MIT License)
|
2
2
|
|
3
3
|
Copyright (c) 2009-2015 Jari Bakken
|
4
|
-
Copyright (c) 2015-
|
5
|
-
Copyright (c) 2018 Justin Ko
|
4
|
+
Copyright (c) 2015-2021 Alex Rodionov, Titus Fortner
|
5
|
+
Copyright (c) 2018-2021 Justin Ko
|
6
6
|
|
7
7
|
Permission is hereby granted, free of charge, to any person obtaining
|
8
8
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
@@ -3,10 +3,9 @@
|
|
3
3
|
Watir Powered By Selenium!
|
4
4
|
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/watir.svg)](http://badge.fury.io/rb/watir)
|
6
|
-
[![
|
7
|
-
[![AppVeyor status](https://ci.appveyor.com/api/projects/status/9vbb7pp5p4uyoott/branch/master?svg=true)](https://ci.appveyor.com/project/p0deje/watir)
|
6
|
+
[![All Tests](https://github.com/watir/watir/actions/workflows/tests.yml/badge.svg)](https://github.com/watir/watir/actions/workflows/tests.yml)
|
8
7
|
[![Code Climate](https://codeclimate.com/github/watir/watir.svg)](https://codeclimate.com/github/watir/watir)
|
9
|
-
[![Coverage Status](https://coveralls.io/repos/github/watir/watir/badge.svg?branch=
|
8
|
+
[![Coverage Status](https://coveralls.io/repos/github/watir/watir/badge.svg?branch=main)](https://coveralls.io/github/watir/watir?branch=main)
|
10
9
|
|
11
10
|
## Using Watir
|
12
11
|
|
@@ -69,11 +68,11 @@ $ bundle exec rake svg:update
|
|
69
68
|
|
70
69
|
## Specs
|
71
70
|
|
72
|
-
####
|
71
|
+
#### Github Actions
|
73
72
|
|
74
|
-
Watir specs are run
|
73
|
+
Watir specs are run with [Github Actions](https://github.com/watir/watir/workflows).
|
75
74
|
|
76
|
-
Watir code is tested
|
75
|
+
Watir code is tested on Linux with latest versions of supported browsers and all active Ruby versions.
|
77
76
|
|
78
77
|
#### Doctests
|
79
78
|
|
@@ -95,7 +94,7 @@ to ensure all paths in their code have tests associated with them.
|
|
95
94
|
|
96
95
|
Watir is using [Rubocop](https://github.com/rubocop-hq/rubocop) to ensure a consistent style across the
|
97
96
|
code base. It is run with our minimum supported Ruby version (2.3)
|
98
|
-
We have some [established exceptions](https://github.com/watir/watir/blob/
|
97
|
+
We have some [established exceptions](https://github.com/watir/watir/blob/main/.rubocop.yml)
|
99
98
|
that might need to be tweaked for new code submissions. This can be addressed in the PR as necessary.
|
100
99
|
|
101
100
|
#### Statistics
|
@@ -107,7 +106,4 @@ on wire calls.
|
|
107
106
|
|
108
107
|
## Copyright
|
109
108
|
|
110
|
-
Copyright (c) 2009-2015 Jari Bakken
|
111
|
-
Copyright (c) 2015-2018 Alex Rodionov, Titus Fortner
|
112
|
-
Copyright (c) 2018 Justin Ko
|
113
109
|
See LICENSE for details
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ Bundler::GemHelper.install_tasks
|
|
5
5
|
|
6
6
|
require 'rspec/core/rake_task'
|
7
7
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
8
|
-
spec.rspec_opts = %w[--color --
|
8
|
+
spec.rspec_opts = %w[--color --format doc]
|
9
9
|
spec.pattern = 'spec/**/*_spec.rb'
|
10
10
|
spec.exclude_pattern = 'spec/unit/**/*_spec.rb'
|
11
11
|
end
|
@@ -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/adjacent.rb
CHANGED
@@ -117,7 +117,7 @@ module Watir
|
|
117
117
|
el = Watir.element_class_for(opt[:tag_name] || '').new(self, opt)
|
118
118
|
el.is_a?(Input) ? el.to_subtype : el
|
119
119
|
elsif opt[:tag_name]
|
120
|
-
|
120
|
+
Watir.const_get("#{Watir.element_class_for(opt[:tag_name])}Collection").new(self, opt)
|
121
121
|
else
|
122
122
|
HTMLElementCollection.new(self, opt)
|
123
123
|
end
|
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
|
|
@@ -84,6 +83,7 @@ module Watir
|
|
84
83
|
false
|
85
84
|
end
|
86
85
|
alias present? exists?
|
86
|
+
alias exist? exists?
|
87
87
|
|
88
88
|
#
|
89
89
|
# @api private
|
@@ -103,13 +103,9 @@ module Watir
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def wait_for_exists
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
wait_until(message: 'waiting for alert', &:exists?)
|
110
|
-
rescue Wait::TimeoutError
|
111
|
-
raise UnknownObjectException, 'unable to locate alert'
|
112
|
-
end
|
106
|
+
wait_until(message: 'waiting for alert', &:exists?)
|
107
|
+
rescue Wait::TimeoutError
|
108
|
+
raise UnknownObjectException, 'unable to locate alert'
|
113
109
|
end
|
114
110
|
end # Alert
|
115
111
|
end # Watir
|
@@ -29,7 +29,7 @@ module Watir
|
|
29
29
|
|
30
30
|
def attribute_list
|
31
31
|
@attribute_list ||= (typed_attributes.values.flatten +
|
32
|
-
ancestors[1
|
32
|
+
ancestors[1..].map { |e|
|
33
33
|
e.attribute_list if e.respond_to?(:attribute_list)
|
34
34
|
}.compact.flatten
|
35
35
|
).uniq
|
@@ -46,6 +46,8 @@ module Watir
|
|
46
46
|
# @return [$1] value of $3 property
|
47
47
|
#
|
48
48
|
def attribute(type, method, attr)
|
49
|
+
return if method_defined?(method)
|
50
|
+
|
49
51
|
typed_attributes[type] << [method, attr]
|
50
52
|
define_attribute(type, method, attr)
|
51
53
|
end
|
data/lib/watir/browser.rb
CHANGED
@@ -12,7 +12,7 @@ module Watir
|
|
12
12
|
include Scrolling
|
13
13
|
|
14
14
|
attr_writer :default_context, :original_window, :locator_namespace, :timer
|
15
|
-
attr_reader :driver, :after_hooks
|
15
|
+
attr_reader :driver, :after_hooks, :capabilities
|
16
16
|
alias wd driver # ensures duck typing with Watir::Element
|
17
17
|
|
18
18
|
class << self
|
@@ -42,8 +42,8 @@ module Watir
|
|
42
42
|
def initialize(browser = :chrome, *args)
|
43
43
|
case browser
|
44
44
|
when ::Symbol, String
|
45
|
-
|
46
|
-
@driver = Selenium::WebDriver.for(
|
45
|
+
@capabilities = Capabilities.new(browser, *args)
|
46
|
+
@driver = Selenium::WebDriver.for(*@capabilities.to_args)
|
47
47
|
when Selenium::WebDriver::Driver
|
48
48
|
@driver = browser
|
49
49
|
else
|
@@ -55,16 +55,21 @@ module Watir
|
|
55
55
|
@default_context = true
|
56
56
|
end
|
57
57
|
|
58
|
+
# rubocop:disable Metrics/AbcSize
|
59
|
+
# TODO: w3c default behavior does not like checking if alert exists
|
58
60
|
def inspect
|
59
61
|
if alert.exists?
|
60
62
|
format('#<%s:0x%x alert=true>', self.class, hash * 2)
|
61
63
|
else
|
62
64
|
format('#<%s:0x%x url=%s title=%s>', self.class, hash * 2, url.inspect, title.inspect)
|
63
65
|
end
|
66
|
+
rescue Selenium::WebDriver::Error::NoSuchWindowError
|
67
|
+
format('#<%s:0x%x closed=%s>', self.class, hash * 2, closed?)
|
64
68
|
rescue Errno::ECONNREFUSED
|
65
69
|
format('#<%s:0x%x closed=true>', self.class, hash * 2)
|
66
70
|
end
|
67
71
|
alias selector_string inspect
|
72
|
+
# rubocop:enable Metrics/AbcSize
|
68
73
|
|
69
74
|
#
|
70
75
|
# Returns URL of current page.
|
@@ -101,13 +106,23 @@ module Watir
|
|
101
106
|
#
|
102
107
|
|
103
108
|
def close
|
104
|
-
return if
|
109
|
+
return if closed?
|
105
110
|
|
106
111
|
@driver.quit
|
107
112
|
@closed = true
|
108
113
|
end
|
109
114
|
alias quit close
|
110
115
|
|
116
|
+
#
|
117
|
+
# Returns true if browser is closed and false otherwise.
|
118
|
+
#
|
119
|
+
# @return [Boolean]
|
120
|
+
#
|
121
|
+
|
122
|
+
def closed?
|
123
|
+
@closed
|
124
|
+
end
|
125
|
+
|
111
126
|
#
|
112
127
|
# Handles cookies.
|
113
128
|
#
|
@@ -213,11 +228,11 @@ module Watir
|
|
213
228
|
# @param args Arguments will be available in the given script in the 'arguments' pseudo-array
|
214
229
|
#
|
215
230
|
|
216
|
-
def execute_script(script, *args)
|
231
|
+
def execute_script(script, *args, function_name: nil)
|
217
232
|
args.map! do |e|
|
218
233
|
e.is_a?(Element) ? e.wait_until(&:exists?).wd : e
|
219
234
|
end
|
220
|
-
|
235
|
+
Watir.logger.info "Executing Script on Browser: #{function_name}" if function_name
|
221
236
|
wrap_elements_in(self, @driver.execute_script(script, *args))
|
222
237
|
end
|
223
238
|
|
@@ -252,12 +267,12 @@ module Watir
|
|
252
267
|
#
|
253
268
|
|
254
269
|
def exist?
|
255
|
-
|
270
|
+
!closed? && window.present?
|
256
271
|
end
|
257
272
|
alias exists? exist?
|
258
273
|
|
259
274
|
def locate
|
260
|
-
raise Error, 'browser was closed' if
|
275
|
+
raise Error, 'browser was closed' if closed?
|
261
276
|
|
262
277
|
ensure_context
|
263
278
|
end
|
@@ -267,7 +282,6 @@ module Watir
|
|
267
282
|
|
268
283
|
driver.switch_to.default_content
|
269
284
|
@default_context = true
|
270
|
-
after_hooks.run
|
271
285
|
end
|
272
286
|
|
273
287
|
def browser
|