watir 6.13.0 → 6.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +141 -0
- data/.travis.yml +6 -0
- data/CHANGES.md +12 -0
- data/Gemfile +4 -10
- data/README.md +64 -49
- data/Rakefile +28 -16
- data/lib/watir.rb +13 -15
- data/lib/watir/adjacent.rb +15 -13
- data/lib/watir/after_hooks.rb +8 -10
- data/lib/watir/alert.rb +7 -8
- data/lib/watir/aliases.rb +2 -2
- data/lib/watir/attribute_helper.rb +18 -20
- data/lib/watir/browser.rb +42 -75
- data/lib/watir/capabilities.rb +19 -10
- data/lib/watir/cell_container.rb +0 -2
- data/lib/watir/container.rb +4 -4
- data/lib/watir/cookies.rb +7 -8
- data/lib/watir/element_collection.rb +37 -22
- data/lib/watir/elements/area.rb +0 -2
- data/lib/watir/elements/button.rb +1 -3
- data/lib/watir/elements/cell.rb +0 -1
- data/lib/watir/elements/checkbox.rb +5 -7
- data/lib/watir/elements/date_field.rb +5 -9
- data/lib/watir/elements/date_time_field.rb +6 -10
- data/lib/watir/elements/dlist.rb +2 -4
- data/lib/watir/elements/element.rb +201 -99
- data/lib/watir/elements/file_field.rb +3 -4
- data/lib/watir/elements/font.rb +2 -4
- data/lib/watir/elements/form.rb +0 -2
- data/lib/watir/elements/hidden.rb +3 -4
- data/lib/watir/elements/html_elements.rb +24 -76
- data/lib/watir/elements/iframe.rb +57 -71
- data/lib/watir/elements/image.rb +3 -4
- data/lib/watir/elements/input.rb +0 -2
- data/lib/watir/elements/link.rb +2 -5
- data/lib/watir/elements/list.rb +4 -4
- data/lib/watir/elements/option.rb +3 -6
- data/lib/watir/elements/radio.rb +4 -6
- data/lib/watir/elements/row.rb +0 -1
- data/lib/watir/elements/select.rb +41 -43
- data/lib/watir/elements/svg_elements.rb +0 -116
- data/lib/watir/elements/table.rb +1 -2
- data/lib/watir/elements/table_cell.rb +2 -3
- data/lib/watir/elements/text_field.rb +4 -6
- data/lib/watir/exception.rb +0 -1
- data/lib/watir/extensions/nokogiri.rb +2 -4
- data/lib/watir/generator.rb +3 -3
- data/lib/watir/generator/base.rb +10 -10
- data/lib/watir/generator/base/generator.rb +26 -29
- data/lib/watir/generator/base/idl_sorter.rb +34 -32
- data/lib/watir/generator/base/spec_extractor.rb +132 -114
- data/lib/watir/generator/base/util.rb +1 -3
- data/lib/watir/generator/base/visitor.rb +140 -140
- data/lib/watir/generator/html.rb +4 -4
- data/lib/watir/generator/html/generator.rb +2 -4
- data/lib/watir/generator/html/spec_extractor.rb +33 -33
- data/lib/watir/generator/html/visitor.rb +14 -14
- data/lib/watir/generator/svg.rb +3 -3
- data/lib/watir/generator/svg/generator.rb +1 -3
- data/lib/watir/generator/svg/spec_extractor.rb +35 -35
- data/lib/watir/generator/svg/visitor.rb +14 -14
- data/lib/watir/has_window.rb +2 -4
- data/lib/watir/js_execution.rb +7 -9
- data/lib/watir/js_snippets.rb +3 -3
- data/lib/watir/js_snippets/attributeValues.js +11 -0
- data/lib/watir/legacy_wait.rb +7 -12
- data/lib/watir/locators.rb +9 -11
- data/lib/watir/locators/button/locator.rb +2 -3
- data/lib/watir/locators/button/selector_builder.rb +9 -9
- data/lib/watir/locators/button/selector_builder/xpath.rb +1 -1
- data/lib/watir/locators/button/validator.rb +2 -2
- data/lib/watir/locators/cell/locator.rb +0 -2
- data/lib/watir/locators/cell/selector_builder.rb +3 -5
- data/lib/watir/locators/element/locator.rb +85 -64
- data/lib/watir/locators/element/selector_builder.rb +40 -38
- data/lib/watir/locators/element/selector_builder/xpath.rb +20 -18
- data/lib/watir/locators/element/validator.rb +1 -1
- data/lib/watir/locators/row/locator.rb +0 -2
- data/lib/watir/locators/row/selector_builder.rb +6 -9
- data/lib/watir/locators/text_area/selector_builder.rb +1 -1
- data/lib/watir/locators/text_field/locator.rb +1 -3
- data/lib/watir/locators/text_field/selector_builder.rb +5 -5
- data/lib/watir/locators/text_field/selector_builder/xpath.rb +1 -1
- data/lib/watir/locators/text_field/validator.rb +3 -2
- data/lib/watir/logger.rb +11 -21
- data/lib/watir/navigation.rb +49 -0
- data/lib/watir/radio_set.rb +17 -18
- data/lib/watir/row_container.rb +3 -5
- data/lib/watir/screenshot.rb +2 -4
- data/lib/watir/user_editable.rb +13 -8
- data/lib/watir/version.rb +3 -0
- data/lib/watir/wait.rb +56 -55
- data/lib/watir/wait/timer.rb +1 -3
- data/lib/watir/window.rb +36 -45
- data/lib/watir/xpath_support.rb +1 -3
- data/lib/watirspec.rb +11 -11
- data/lib/watirspec/guards.rb +10 -7
- data/lib/watirspec/implementation.rb +3 -4
- data/lib/watirspec/rake_tasks.rb +30 -29
- data/lib/watirspec/remote_server.rb +3 -3
- data/lib/watirspec/runner.rb +1 -2
- data/lib/watirspec/server.rb +3 -0
- data/lib/watirspec/server/app.rb +14 -6
- data/spec/implementation_spec.rb +9 -9
- data/spec/locator_spec_helper.rb +3 -4
- data/spec/spec_helper.rb +3 -7
- data/spec/unit/container_spec.rb +9 -10
- data/spec/unit/element_locator_spec.rb +224 -219
- data/spec/unit/logger_spec.rb +4 -4
- data/spec/unit/unit_helper.rb +0 -2
- data/spec/unit/wait_spec.rb +26 -28
- data/spec/watirspec/adjacent_spec.rb +130 -130
- data/spec/watirspec/after_hooks_spec.rb +63 -63
- data/spec/watirspec/alert_spec.rb +6 -6
- data/spec/watirspec/attributes_spec.rb +6 -6
- data/spec/watirspec/browser_spec.rb +161 -162
- data/spec/watirspec/click_spec.rb +9 -9
- data/spec/watirspec/cookies_spec.rb +15 -14
- data/spec/watirspec/drag_and_drop_spec.rb +15 -16
- data/spec/watirspec/element_hidden_spec.rb +19 -21
- data/spec/watirspec/elements/area_spec.rb +18 -21
- data/spec/watirspec/elements/areas_spec.rb +13 -15
- data/spec/watirspec/elements/button_spec.rb +96 -99
- data/spec/watirspec/elements/buttons_spec.rb +17 -19
- data/spec/watirspec/elements/checkbox_spec.rb +102 -100
- data/spec/watirspec/elements/checkboxes_spec.rb +13 -15
- data/spec/watirspec/elements/collections_spec.rb +35 -37
- data/spec/watirspec/elements/date_field_spec.rb +46 -47
- data/spec/watirspec/elements/date_fields_spec.rb +13 -15
- data/spec/watirspec/elements/date_time_field_spec.rb +62 -57
- data/spec/watirspec/elements/date_time_fields_spec.rb +14 -15
- data/spec/watirspec/elements/dd_spec.rb +46 -48
- data/spec/watirspec/elements/dds_spec.rb +13 -15
- data/spec/watirspec/elements/del_spec.rb +27 -28
- data/spec/watirspec/elements/dels_spec.rb +13 -15
- data/spec/watirspec/elements/div_spec.rb +89 -91
- data/spec/watirspec/elements/divs_spec.rb +17 -19
- data/spec/watirspec/elements/dl_spec.rb +52 -54
- data/spec/watirspec/elements/dls_spec.rb +13 -15
- data/spec/watirspec/elements/dt_spec.rb +46 -48
- data/spec/watirspec/elements/dts_spec.rb +13 -15
- data/spec/watirspec/elements/element_spec.rb +240 -189
- data/spec/watirspec/elements/elements_spec.rb +16 -16
- data/spec/watirspec/elements/em_spec.rb +38 -40
- data/spec/watirspec/elements/ems_spec.rb +13 -15
- data/spec/watirspec/elements/filefield_spec.rb +45 -46
- data/spec/watirspec/elements/filefields_spec.rb +13 -15
- data/spec/watirspec/elements/font_spec.rb +11 -13
- data/spec/watirspec/elements/form_spec.rb +13 -15
- data/spec/watirspec/elements/forms_spec.rb +13 -15
- data/spec/watirspec/elements/frame_spec.rb +48 -50
- data/spec/watirspec/elements/frames_spec.rb +13 -15
- data/spec/watirspec/elements/hidden_spec.rb +23 -25
- data/spec/watirspec/elements/hiddens_spec.rb +13 -15
- data/spec/watirspec/elements/hn_spec.rb +22 -24
- data/spec/watirspec/elements/hns_spec.rb +13 -13
- data/spec/watirspec/elements/iframe_spec.rb +106 -74
- data/spec/watirspec/elements/iframes_spec.rb +16 -18
- data/spec/watirspec/elements/image_spec.rb +30 -32
- data/spec/watirspec/elements/images_spec.rb +13 -15
- data/spec/watirspec/elements/input_spec.rb +4 -5
- data/spec/watirspec/elements/ins_spec.rb +27 -29
- data/spec/watirspec/elements/inses_spec.rb +13 -15
- data/spec/watirspec/elements/label_spec.rb +17 -19
- data/spec/watirspec/elements/labels_spec.rb +13 -15
- data/spec/watirspec/elements/li_spec.rb +23 -25
- data/spec/watirspec/elements/link_spec.rb +45 -48
- data/spec/watirspec/elements/links_spec.rb +14 -16
- data/spec/watirspec/elements/lis_spec.rb +13 -15
- data/spec/watirspec/elements/list_spec.rb +14 -15
- data/spec/watirspec/elements/map_spec.rb +19 -20
- data/spec/watirspec/elements/maps_spec.rb +13 -15
- data/spec/watirspec/elements/meta_spec.rb +10 -10
- data/spec/watirspec/elements/metas_spec.rb +13 -15
- data/spec/watirspec/elements/ol_spec.rb +20 -21
- data/spec/watirspec/elements/ols_spec.rb +13 -15
- data/spec/watirspec/elements/option_spec.rb +63 -63
- data/spec/watirspec/elements/p_spec.rb +27 -26
- data/spec/watirspec/elements/pre_spec.rb +24 -25
- data/spec/watirspec/elements/pres_spec.rb +13 -15
- data/spec/watirspec/elements/ps_spec.rb +13 -15
- data/spec/watirspec/elements/radio_spec.rb +96 -97
- data/spec/watirspec/elements/radios_spec.rb +13 -15
- data/spec/watirspec/elements/select_list_spec.rb +244 -237
- data/spec/watirspec/elements/select_lists_spec.rb +15 -16
- data/spec/watirspec/elements/span_spec.rb +32 -31
- data/spec/watirspec/elements/spans_spec.rb +13 -15
- data/spec/watirspec/elements/strong_spec.rb +23 -24
- data/spec/watirspec/elements/strongs_spec.rb +13 -15
- data/spec/watirspec/elements/table_nesting_spec.rb +15 -14
- data/spec/watirspec/elements/table_spec.rb +61 -62
- data/spec/watirspec/elements/tables_spec.rb +15 -17
- data/spec/watirspec/elements/tbody_spec.rb +25 -26
- data/spec/watirspec/elements/tbodys_spec.rb +17 -19
- data/spec/watirspec/elements/td_spec.rb +20 -22
- data/spec/watirspec/elements/tds_spec.rb +9 -11
- data/spec/watirspec/elements/text_field_spec.rb +55 -56
- data/spec/watirspec/elements/text_fields_spec.rb +15 -16
- data/spec/watirspec/elements/textarea_spec.rb +2 -2
- data/spec/watirspec/elements/textareas_spec.rb +1 -1
- data/spec/watirspec/elements/tfoot_spec.rb +22 -23
- data/spec/watirspec/elements/tfoots_spec.rb +19 -19
- data/spec/watirspec/elements/thead_spec.rb +21 -23
- data/spec/watirspec/elements/theads_spec.rb +19 -19
- data/spec/watirspec/elements/tr_spec.rb +20 -22
- data/spec/watirspec/elements/trs_spec.rb +17 -19
- data/spec/watirspec/elements/ul_spec.rb +17 -19
- data/spec/watirspec/elements/uls_spec.rb +13 -14
- data/spec/watirspec/html/data_attributes.html +1 -0
- data/spec/watirspec/radio_set_spec.rb +100 -99
- data/spec/watirspec/relaxed_locate_spec.rb +19 -43
- data/spec/watirspec/screenshot_spec.rb +4 -4
- data/spec/watirspec/special_chars_spec.rb +2 -4
- data/spec/watirspec/support/rspec_matchers.rb +85 -22
- data/spec/watirspec/user_editable_spec.rb +84 -85
- data/spec/watirspec/wait_spec.rb +74 -95
- data/spec/watirspec/window_switching_spec.rb +131 -132
- data/spec/watirspec_helper.rb +12 -9
- data/support/travis.sh +4 -0
- data/support/version_differ.rb +12 -13
- data/watir.gemspec +29 -22
- metadata +76 -50
@@ -1,21 +1,21 @@
|
|
1
1
|
module Watir
|
2
2
|
module Generator
|
3
|
-
|
3
|
+
module HTML
|
4
|
+
class Visitor < Base::Visitor
|
5
|
+
def classify_regexp
|
6
|
+
/^HTML(.+)Element$/
|
7
|
+
end
|
4
8
|
|
5
|
-
|
6
|
-
/^HTML(.+)Element$/
|
7
|
-
end
|
9
|
+
private
|
8
10
|
|
9
|
-
|
11
|
+
def interface_regexp
|
12
|
+
/^HTML/
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
{ 'HTMLElement' => 'Element' }
|
17
|
-
end
|
18
|
-
|
19
|
-
end # HTML::Visitor
|
15
|
+
def force_inheritance
|
16
|
+
{'HTMLElement' => 'Element'}
|
17
|
+
end
|
18
|
+
end # Visitor
|
19
|
+
end # HTML
|
20
20
|
end # Generator
|
21
21
|
end # Watir
|
data/lib/watir/generator/svg.rb
CHANGED
@@ -2,6 +2,6 @@ ActiveSupport::Inflector.inflections do |inflect|
|
|
2
2
|
inflect.plural 'defs', 'defss'
|
3
3
|
end
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
5
|
+
require 'watir/generator/svg/generator'
|
6
|
+
require 'watir/generator/svg/spec_extractor'
|
7
|
+
require 'watir/generator/svg/visitor'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Watir
|
2
2
|
module Generator
|
3
3
|
class SVG < Base
|
4
|
-
|
5
4
|
private
|
6
5
|
|
7
6
|
# fix collisions with HTML
|
@@ -10,7 +9,7 @@ module Watir
|
|
10
9
|
# are inherited from HTML ones
|
11
10
|
|
12
11
|
def ignored_tags
|
13
|
-
%w
|
12
|
+
%w[a audio canvas iframe image script source style text title track video unknown]
|
14
13
|
end
|
15
14
|
|
16
15
|
def ignored_interfaces
|
@@ -32,7 +31,6 @@ module Watir
|
|
32
31
|
def extractor_class
|
33
32
|
SVG::SpecExtractor
|
34
33
|
end
|
35
|
-
|
36
34
|
end # SVG
|
37
35
|
end # Generator
|
38
36
|
end # Watir
|
@@ -1,53 +1,53 @@
|
|
1
1
|
module Watir
|
2
2
|
module Generator
|
3
|
-
|
3
|
+
module SVG
|
4
|
+
class SpecExtractor < Base::SpecExtractor
|
5
|
+
private
|
4
6
|
|
5
|
-
|
7
|
+
def extract_interface_map
|
8
|
+
list = @doc.search("//div[@id='chapter-eltindex']//ul/li")
|
9
|
+
list.any? || raise('could not find elements list')
|
6
10
|
|
7
|
-
|
8
|
-
|
9
|
-
list.any? or raise 'could not find elements list'
|
10
|
-
|
11
|
-
@interface_map = parse_list(list)
|
12
|
-
end
|
11
|
+
@interface_map = parse_list(list)
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
def build_result
|
15
|
+
{}.tap do |result|
|
16
|
+
@interface_map.each do |tag, interface|
|
17
|
+
result[tag] = fetch_interface(interface)
|
18
|
+
end
|
18
19
|
end
|
19
20
|
end
|
20
|
-
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
def parse_list(list)
|
23
|
+
{}.tap do |result|
|
24
|
+
list.each do |node|
|
25
|
+
tag_name = node.css('a span').inner_text.strip
|
26
|
+
id = node.css('a').attr('href').to_s
|
27
27
|
|
28
|
-
|
28
|
+
next if external_interface?(id)
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
interface_css = 'div.element-summary a.idlinterface'
|
31
|
+
interface_definitions = @doc.css("#{id} #{interface_css}, #{id} ~ #{interface_css}")
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
# TSpan is defined along with Text so the first IDL definition is SVGTextElement
|
34
|
+
idx = tag_name == 'tspan' ? 1 : 0
|
35
35
|
|
36
|
-
|
36
|
+
result[tag_name] = interface_definitions[idx].inner_text.strip
|
37
|
+
end
|
37
38
|
end
|
38
39
|
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def issued_interfaces
|
42
|
-
%w(SVGHatchElement SVGHatchPathElement SVGSolidColorElement)
|
43
|
-
end
|
44
40
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
id !~ /^#.+/
|
49
|
-
end
|
41
|
+
def issued_interfaces
|
42
|
+
[]
|
43
|
+
end
|
50
44
|
|
51
|
-
|
45
|
+
# Some interfaces are actually defined in different specs
|
46
|
+
# (for example, clipPath), so we ignore them for now.
|
47
|
+
def external_interface?(id)
|
48
|
+
id !~ /^#.+/
|
49
|
+
end
|
50
|
+
end # SpecExtractor
|
51
|
+
end # SVG
|
52
52
|
end # Generator
|
53
53
|
end # Watir
|
@@ -1,21 +1,21 @@
|
|
1
1
|
module Watir
|
2
2
|
module Generator
|
3
|
-
|
3
|
+
module SVG
|
4
|
+
class Visitor < Base::Visitor
|
5
|
+
def classify_regexp
|
6
|
+
/^SVG(.+)Element$/
|
7
|
+
end
|
4
8
|
|
5
|
-
|
6
|
-
/^SVG(.+)Element$/
|
7
|
-
end
|
9
|
+
private
|
8
10
|
|
9
|
-
|
11
|
+
def interface_regexp
|
12
|
+
/^SVG.*Element$/
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
{ 'SVGElement' => 'HTMLElement' }
|
17
|
-
end
|
18
|
-
|
19
|
-
end # SVG::Visitor
|
15
|
+
def force_inheritance
|
16
|
+
{'SVGElement' => 'HTMLElement'}
|
17
|
+
end
|
18
|
+
end # Visitor
|
19
|
+
end # SVG
|
20
20
|
end # Generator
|
21
21
|
end # Watir
|
data/lib/watir/has_window.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Watir
|
2
2
|
module HasWindow
|
3
|
-
|
4
3
|
#
|
5
4
|
# Returns browser windows array.
|
6
5
|
#
|
@@ -55,14 +54,13 @@ module Watir
|
|
55
54
|
private
|
56
55
|
|
57
56
|
def filter_windows(selector, windows)
|
58
|
-
unless selector.keys.all? { |k| [
|
57
|
+
unless selector.keys.all? { |k| %i[title url].include? k }
|
59
58
|
raise ArgumentError, "invalid window selector: #{selector.inspect}"
|
60
59
|
end
|
61
60
|
|
62
61
|
windows.select do |win|
|
63
|
-
selector.all? { |key, value|
|
62
|
+
selector.all? { |key, value| win.send(key) =~ /#{value}/ }
|
64
63
|
end
|
65
64
|
end
|
66
|
-
|
67
65
|
end # HasWindow
|
68
66
|
end # Watir
|
data/lib/watir/js_execution.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Watir
|
2
2
|
module JSExecution
|
3
|
-
|
4
3
|
#
|
5
4
|
# Delegates script execution to Browser or IFrame.
|
6
5
|
#
|
@@ -50,14 +49,14 @@ module Watir
|
|
50
49
|
|
51
50
|
def flash(preset = :default, color: 'red', flashes: 10, delay: 0.1)
|
52
51
|
presets = {
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
52
|
+
fast: {delay: 0.04},
|
53
|
+
slow: {delay: 0.2},
|
54
|
+
long: {flashes: 5, delay: 0.5},
|
55
|
+
rainbow: {flashes: 5, color: %w[red orange yellow green blue indigo violet]}
|
57
56
|
}
|
58
|
-
return
|
57
|
+
return flash(presets[preset]) unless presets[preset].nil?
|
59
58
|
|
60
|
-
background_color = original_color = style(
|
59
|
+
background_color = original_color = style('background-color')
|
61
60
|
background_color = 'white' if background_color.empty?
|
62
61
|
colors = Array(color).push(background_color)
|
63
62
|
|
@@ -123,7 +122,7 @@ module Watir
|
|
123
122
|
def outer_html
|
124
123
|
element_call { execute_js(:getOuterHtml, @element) }.strip
|
125
124
|
end
|
126
|
-
|
125
|
+
alias html outer_html
|
127
126
|
|
128
127
|
#
|
129
128
|
# Returns text content of element.
|
@@ -149,6 +148,5 @@ module Watir
|
|
149
148
|
def select_text(str)
|
150
149
|
element_call { execute_js :selectText, @element, str }
|
151
150
|
end
|
152
|
-
|
153
151
|
end # JSExecution
|
154
152
|
end # Watir
|
data/lib/watir/js_snippets.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module Watir
|
2
2
|
module JSSnippets
|
3
|
-
|
4
|
-
private
|
3
|
+
#
|
4
|
+
# @api private
|
5
|
+
#
|
5
6
|
|
6
7
|
def execute_js(function_name, *arguments)
|
7
8
|
file = File.expand_path("../js_snippets/#{function_name}.js", __FILE__)
|
@@ -11,6 +12,5 @@ module Watir
|
|
11
12
|
script = "return (#{js}).apply(null, arguments)"
|
12
13
|
@query_scope.execute_script(script, *arguments)
|
13
14
|
end
|
14
|
-
|
15
15
|
end # JSSnippets
|
16
16
|
end # Watir
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// Original Author: Justin Ko
|
2
|
+
// Source: https://stackoverflow.com/questions/12485833/how-do-i-retrieve-list-of-element-attributes-using-watir-webdriver
|
3
|
+
function() {
|
4
|
+
var s = {};
|
5
|
+
var attrs = arguments[0].attributes;
|
6
|
+
for (var l = 0; l < attrs.length; ++l) {
|
7
|
+
var a = attrs[l];
|
8
|
+
s[a.name] = a.value.trim();
|
9
|
+
}
|
10
|
+
return s;
|
11
|
+
}
|
data/lib/watir/legacy_wait.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
|
3
|
-
# TODO - remove this file for future release
|
3
|
+
# TODO: - remove this file for future release
|
4
4
|
module Watir
|
5
|
-
|
6
5
|
class BaseDecorator
|
7
6
|
def initialize(element, timeout, message = nil)
|
8
7
|
@element = element
|
@@ -10,18 +9,16 @@ module Watir
|
|
10
9
|
@message = message
|
11
10
|
end
|
12
11
|
|
13
|
-
def
|
12
|
+
def respond_to_missing?(*args)
|
14
13
|
@element.respond_to?(*args)
|
15
14
|
end
|
16
15
|
|
17
|
-
def method_missing(
|
18
|
-
unless @element.respond_to?(
|
19
|
-
raise NoMethodError, "undefined method `#{m}' for #{@element.inspect}:#{@element.class}"
|
20
|
-
end
|
16
|
+
def method_missing(method, *args, &block)
|
17
|
+
return super unless @element.respond_to?(method)
|
21
18
|
|
22
19
|
Watir::Wait.until(@timeout, @message) { wait_until }
|
23
20
|
|
24
|
-
@element.__send__(
|
21
|
+
@element.__send__(method, *args, &block)
|
25
22
|
end
|
26
23
|
end
|
27
24
|
|
@@ -51,7 +48,6 @@ module Watir
|
|
51
48
|
#
|
52
49
|
|
53
50
|
class WhenEnabledDecorator < BaseDecorator
|
54
|
-
|
55
51
|
private
|
56
52
|
|
57
53
|
def wait_until
|
@@ -83,7 +79,7 @@ module Watir
|
|
83
79
|
def when_present(timeout = nil)
|
84
80
|
warning = '#when_present has been deprecated and is unlikely to be needed; '
|
85
81
|
warning << 'replace this with #wait_until_present if a wait is still needed'
|
86
|
-
Watir.logger.warn warning, ids: [
|
82
|
+
Watir.logger.warn warning, ids: %i[when_present deprecations]
|
87
83
|
|
88
84
|
timeout ||= Watir.default_timeout
|
89
85
|
message = "waiting for #{selector_string} to become present"
|
@@ -110,7 +106,7 @@ module Watir
|
|
110
106
|
|
111
107
|
def when_enabled(timeout = nil)
|
112
108
|
Watir.logger.warn '#when_enabled has been deprecated and is unlikely to be needed',
|
113
|
-
ids: [
|
109
|
+
ids: %i[when_enabled deprecations]
|
114
110
|
|
115
111
|
timeout ||= Watir.default_timeout
|
116
112
|
message = "waiting for #{selector_string} to become enabled"
|
@@ -122,6 +118,5 @@ module Watir
|
|
122
118
|
WhenEnabledDecorator.new(self, timeout, message)
|
123
119
|
end
|
124
120
|
end
|
125
|
-
|
126
121
|
end # EventuallyPresent
|
127
122
|
end # Watir
|
data/lib/watir/locators.rb
CHANGED
@@ -27,23 +27,23 @@ module Watir
|
|
27
27
|
module ClassHelpers
|
28
28
|
def locator_class
|
29
29
|
class_from_string("#{browser.locator_namespace}::#{element_class_name}::Locator") ||
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
class_from_string("Watir::Locators::#{element_class_name}::Locator") ||
|
31
|
+
class_from_string("#{browser.locator_namespace}::Element::Locator") ||
|
32
|
+
Watir::Locators::Element::Locator
|
33
33
|
end
|
34
34
|
|
35
35
|
def element_validator_class
|
36
36
|
class_from_string("#{browser.locator_namespace}::#{element_class_name}::Validator") ||
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
class_from_string("Watir::Locators::#{element_class_name}::Validator") ||
|
38
|
+
class_from_string("#{browser.locator_namespace}::Element::Validator") ||
|
39
|
+
Watir::Locators::Element::Validator
|
40
40
|
end
|
41
41
|
|
42
42
|
def selector_builder_class
|
43
43
|
class_from_string("#{browser.locator_namespace}::#{element_class_name}::SelectorBuilder") ||
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
class_from_string("Watir::Locators::#{element_class_name}::SelectorBuilder") ||
|
45
|
+
class_from_string("#{browser.locator_namespace}::Element::SelectorBuilder") ||
|
46
|
+
Watir::Locators::Element::SelectorBuilder
|
47
47
|
end
|
48
48
|
|
49
49
|
def class_from_string(string)
|
@@ -57,8 +57,6 @@ module Watir
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def build_locator
|
60
|
-
@query_scope.send :ensure_context
|
61
|
-
|
62
60
|
element_validator = element_validator_class.new
|
63
61
|
selector_builder = selector_builder_class.new(@query_scope, @selector.dup, element_class.attribute_list)
|
64
62
|
locator_class.new(@query_scope, @selector.dup, selector_builder, element_validator)
|
@@ -2,8 +2,6 @@ module Watir
|
|
2
2
|
module Locators
|
3
3
|
class Button
|
4
4
|
class Locator < Element::Locator
|
5
|
-
|
6
|
-
|
7
5
|
private
|
8
6
|
|
9
7
|
def using_selenium(*)
|
@@ -20,7 +18,8 @@ module Watir
|
|
20
18
|
copy = selector.dup
|
21
19
|
value = copy.delete(:value)
|
22
20
|
|
23
|
-
super(element, copy) &&
|
21
|
+
super(element, copy) &&
|
22
|
+
(fetch_value(element, :value) =~ /#{value}/ || fetch_value(element, :text) =~ /#{value}/)
|
24
23
|
else
|
25
24
|
super
|
26
25
|
end
|
@@ -3,23 +3,23 @@ module Watir
|
|
3
3
|
class Button
|
4
4
|
class SelectorBuilder < Element::SelectorBuilder
|
5
5
|
def build_wd_selector(selectors)
|
6
|
-
return if selectors.values.any? { |e| e.
|
6
|
+
return if selectors.values.any? { |e| e.is_a? Regexp }
|
7
7
|
|
8
|
-
selectors.delete(:tag_name) || raise(
|
8
|
+
selectors.delete(:tag_name) || raise('internal error: no tag_name?!')
|
9
9
|
|
10
10
|
button_attr_exp = xpath_builder.attribute_expression(:button, selectors)
|
11
|
-
|
12
|
-
xpath =
|
11
|
+
|
12
|
+
xpath = './/button'
|
13
13
|
xpath << "[#{button_attr_exp}]" unless button_attr_exp.empty?
|
14
|
-
|
15
|
-
unless selectors[:type]
|
14
|
+
|
15
|
+
unless selectors[:type].eql? false
|
16
16
|
selectors[:type] = Watir::Button::VALID_TYPES if [nil, true].include?(selectors[:type])
|
17
17
|
input_attr_exp = xpath_builder.attribute_expression(:input, selectors)
|
18
|
-
|
19
|
-
xpath <<
|
18
|
+
|
19
|
+
xpath << ' | .//input'
|
20
20
|
xpath << "[#{input_attr_exp}]"
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
p build_wd_selector: xpath if $DEBUG
|
24
24
|
|
25
25
|
[:xpath, xpath]
|