watir 6.17.0 → 7.1.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/.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
|
[](http://badge.fury.io/rb/watir)
|
|
6
|
-
[](https://ci.appveyor.com/project/p0deje/watir)
|
|
6
|
+
[](https://github.com/watir/watir/actions/workflows/tests.yml)
|
|
8
7
|
[](https://codeclimate.com/github/watir/watir)
|
|
9
|
-
[](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
|