watir-webdriver 0.9.1 → 0.9.2

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.travis.yml +7 -3
  4. data/CHANGES.md +6 -0
  5. data/Rakefile +17 -5
  6. data/lib/watir-webdriver.rb +16 -6
  7. data/lib/watir-webdriver/after_hooks.rb +2 -2
  8. data/lib/watir-webdriver/browser.rb +5 -5
  9. data/lib/watir-webdriver/cell_container.rb +4 -10
  10. data/lib/watir-webdriver/element_collection.rb +28 -7
  11. data/lib/watir-webdriver/elements/button.rb +0 -18
  12. data/lib/watir-webdriver/elements/cell.rb +17 -0
  13. data/lib/watir-webdriver/elements/checkbox.rb +0 -3
  14. data/lib/watir-webdriver/elements/element.rb +37 -10
  15. data/lib/watir-webdriver/elements/file_field.rb +0 -3
  16. data/lib/watir-webdriver/elements/hidden.rb +0 -3
  17. data/lib/watir-webdriver/elements/html_elements.rb +0 -219
  18. data/lib/watir-webdriver/elements/iframe.rb +29 -19
  19. data/lib/watir-webdriver/elements/row.rb +17 -0
  20. data/lib/watir-webdriver/elements/svg_elements.rb +0 -120
  21. data/lib/watir-webdriver/elements/table.rb +1 -1
  22. data/lib/watir-webdriver/elements/table_cell.rb +0 -28
  23. data/lib/watir-webdriver/elements/table_row.rb +1 -30
  24. data/lib/watir-webdriver/elements/text_area.rb +0 -17
  25. data/lib/watir-webdriver/elements/text_field.rb +2 -8
  26. data/lib/watir-webdriver/generator/base/visitor.rb +1 -10
  27. data/lib/watir-webdriver/locators.rb +22 -0
  28. data/lib/watir-webdriver/locators/button/locator.rb +38 -0
  29. data/lib/watir-webdriver/locators/button/selector_builder.rb +27 -0
  30. data/lib/watir-webdriver/locators/button/selector_builder/xpath.rb +29 -0
  31. data/lib/watir-webdriver/locators/button/validator.rb +14 -0
  32. data/lib/watir-webdriver/locators/cell/locator.rb +17 -0
  33. data/lib/watir-webdriver/locators/cell/selector_builder.rb +24 -0
  34. data/lib/watir-webdriver/locators/element/locator.rb +249 -0
  35. data/lib/watir-webdriver/locators/element/selector_builder.rb +147 -0
  36. data/lib/watir-webdriver/locators/element/selector_builder/css.rb +65 -0
  37. data/lib/watir-webdriver/locators/element/selector_builder/xpath.rb +72 -0
  38. data/lib/watir-webdriver/locators/element/validator.rb +22 -0
  39. data/lib/watir-webdriver/locators/row/locator.rb +17 -0
  40. data/lib/watir-webdriver/locators/row/selector_builder.rb +29 -0
  41. data/lib/watir-webdriver/locators/text_area/locator.rb +13 -0
  42. data/lib/watir-webdriver/locators/text_area/selector_builder.rb +22 -0
  43. data/lib/watir-webdriver/locators/text_field/locator.rb +42 -0
  44. data/lib/watir-webdriver/locators/text_field/selector_builder.rb +34 -0
  45. data/lib/watir-webdriver/locators/text_field/selector_builder/xpath.rb +19 -0
  46. data/lib/watir-webdriver/locators/text_field/validator.rb +20 -0
  47. data/lib/watir-webdriver/row_container.rb +3 -9
  48. data/lib/watir-webdriver/version.rb +1 -1
  49. data/lib/watir-webdriver/wait.rb +6 -3
  50. data/spec/always_locate_spec.rb +2 -1
  51. data/spec/element_locator_spec.rb +1 -1
  52. data/spec/element_spec.rb +8 -40
  53. data/spec/implementation.rb +52 -45
  54. data/spec/locator_spec_helper.rb +8 -2
  55. data/support/travis.sh +17 -6
  56. metadata +25 -10
  57. data/lib/watir-webdriver/locators/button_locator.rb +0 -85
  58. data/lib/watir-webdriver/locators/child_cell_locator.rb +0 -32
  59. data/lib/watir-webdriver/locators/child_row_locator.rb +0 -37
  60. data/lib/watir-webdriver/locators/element_locator.rb +0 -470
  61. data/lib/watir-webdriver/locators/text_area_locator.rb +0 -24
  62. data/lib/watir-webdriver/locators/text_field_locator.rb +0 -93
@@ -0,0 +1,19 @@
1
+ module Watir
2
+ module Locators
3
+ class TextField
4
+ class SelectorBuilder
5
+ class XPath < Element::SelectorBuilder::XPath
6
+ def lhs_for(building, key)
7
+ if building == :input && key == :text
8
+ "@value"
9
+ elsif building == :textarea && key == :value
10
+ "text()"
11
+ else
12
+ super
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ module Watir
2
+ module Locators
3
+ class TextField
4
+ class Validator < Element::Validator
5
+ VALID_TEXT_FIELD_TAGS = %w[input textarea]
6
+
7
+ def validate(element, selector)
8
+ element_tag_name = element.tag_name.downcase
9
+
10
+ if element.tag_name.downcase == 'textarea'
11
+ warn "Locating textareas with '#text_field' is deprecated. Please, use '#textarea' method instead."
12
+ end
13
+ return unless VALID_TEXT_FIELD_TAGS.include?(element_tag_name)
14
+
15
+ element
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -6,10 +6,7 @@ module Watir
6
6
  #
7
7
 
8
8
  def row(*args)
9
- row = tr(*args)
10
- row.locator_class = ChildRowLocator
11
-
12
- row
9
+ Row.new(self, extract_selector(args).merge(tag_name: "tr"))
13
10
  end
14
11
 
15
12
  #
@@ -17,10 +14,7 @@ module Watir
17
14
  #
18
15
 
19
16
  def rows(*args)
20
- rows = trs(*args)
21
- rows.locator_class = ChildRowLocator
22
-
23
- rows
17
+ RowCollection.new(self, extract_selector(args).merge(tag_name: "tr"))
24
18
  end
25
19
 
26
20
  #
@@ -33,7 +27,7 @@ module Watir
33
27
  assert_exists
34
28
 
35
29
  rows.inject [] do |res, row|
36
- res << row.cells.map { |cell| cell.text }
30
+ res << row.cells.map(&:text)
37
31
  end
38
32
  end
39
33
  alias_method :to_a, :strings
@@ -1,3 +1,3 @@
1
1
  module Watir
2
- VERSION = '0.9.1'
2
+ VERSION = '0.9.2'
3
3
  end
@@ -123,9 +123,12 @@ module Watir
123
123
  #
124
124
 
125
125
  class WhenPresentDecorator < BaseDecorator
126
- extend Forwardable
127
-
128
- def_delegator :@element, :present?
126
+ def present?
127
+ Watir::Wait.until(@timeout, @message) { wait_until }
128
+ true
129
+ rescue Watir::Wait::TimeoutError
130
+ false
131
+ end
129
132
 
130
133
  private
131
134
 
@@ -31,11 +31,12 @@ describe 'Watir' do
31
31
  expect(element.exists?).to be true
32
32
 
33
33
  browser.refresh
34
+ browser.div(id: "text").wait_until_present
34
35
 
35
36
  if Watir.always_locate?
36
37
  expect { element.text }.to_not raise_error
37
38
  else
38
- expect { element.text }.to raise_error
39
+ expect { element.text }.to raise_error Watir::Exception::UnknownObjectException
39
40
  end
40
41
  end
41
42
  end
@@ -1,6 +1,6 @@
1
1
  require File.expand_path("spec_helper", File.dirname(__FILE__))
2
2
 
3
- describe Watir::ElementLocator do
3
+ describe Watir::Locators::Element::Locator do
4
4
  include LocatorSpecHelper
5
5
 
6
6
  describe "finds a single element" do
@@ -52,9 +52,11 @@ describe Watir::Element do
52
52
  describe "#reset!" do
53
53
  it "successfully relocates collection elements after a reset!" do
54
54
  browser.goto(WatirSpec.url_for("wait.html"))
55
- element = browser.div(:id, 'foo')
55
+ element = browser.div(id: 'foo')
56
56
  expect(element).to exist
57
57
  browser.refresh
58
+ browser.div(id: 'foo').wait_until_present
59
+
58
60
  expect(element.exist?).to be false unless Watir.always_locate?
59
61
  element.send :reset!
60
62
  expect(element).to exist
@@ -66,46 +68,15 @@ describe Watir::Element do
66
68
  browser.goto WatirSpec.url_for('removed_element.html')
67
69
  end
68
70
 
69
- it "does not propagate StaleElementReferenceErrors" do
70
- button = browser.button(id: "remove-button")
71
- element = browser.div(id: "text")
72
-
73
- expect(element).to exist
74
- button.click
75
- expect(element).to_not exist
76
- end
77
-
78
71
  it "returns false when an element from a collection becomes stale" do
79
- button = browser.button(id: "remove-button")
80
- text = browser.divs(id: "text").first
81
-
82
- expect(text).to exist
83
- button.click
84
- expect(text).to_not exist
85
- end
86
-
87
- it "returns false when an element becomes stale" do
88
- wd_element = browser.div(id: "text").wd
72
+ watir_element = browser.divs(id: "text").first
73
+ expect(watir_element).to exist
89
74
 
90
- # simulate element going stale during lookup
91
- allow(browser.driver).to receive(:find_element).with(:id, 'text') { wd_element }
92
75
  browser.refresh
93
76
 
94
- expect(browser.div(:id, 'text')).to_not exist
77
+ expect(watir_element).to_not exist
95
78
  end
96
79
 
97
- it "returns appropriate value when an ancestor element becomes stale" do
98
- stale_element = browser.div(id: 'top').div(id: 'middle').div(id: 'bottom')
99
- expect(stale_element.present?).to be true # look up and store @element for each element in hierarchy
100
-
101
- grandparent = stale_element.instance_variable_get('@parent').instance_variable_get('@parent').instance_variable_get('@element')
102
-
103
- # simulate element going stale during lookup
104
- allow(grandparent).to receive('enabled?') { raise Selenium::WebDriver::Error::ObsoleteElementError }
105
-
106
- browser.refresh
107
- expect(stale_element.present?).to be Watir.always_locate?
108
- end
109
80
  end
110
81
 
111
82
  describe "#element_call" do
@@ -125,17 +96,14 @@ describe Watir::Element do
125
96
  if Watir.always_locate?
126
97
  expect { watir_element.text }.to_not raise_error
127
98
  else
128
- expect { watir_element.text }.to raise_error Selenium::WebDriver::Error::StaleElementReferenceError
99
+ expect { watir_element.text }.to raise_error Watir::Exception::UnknownObjectException
129
100
  end
130
101
  end
131
102
 
132
103
  end
133
104
 
134
105
  describe "#hover" do
135
- not_compliant_on %i(webdriver firefox synthesized_events),
136
- %i(webdriver internet_explorer),
137
- %i(webdriver iphone),
138
- %i(webdriver safari) do
106
+ not_compliant_on :internet_explorer, :iphone, :safari do
139
107
  it "should hover over the element" do
140
108
  browser.goto WatirSpec.url_for('hover.html')
141
109
  link = browser.a
@@ -7,6 +7,7 @@ class ImplementationConfig
7
7
 
8
8
  def configure
9
9
  set_webdriver
10
+ start_remote_server if remote? && !ENV["REMOTE_SERVER_URL"]
10
11
  set_browser_args
11
12
  set_guard_proc
12
13
  add_html_routes
@@ -16,6 +17,32 @@ class ImplementationConfig
16
17
 
17
18
  private
18
19
 
20
+ def start_remote_server
21
+ require 'selenium/server'
22
+
23
+ @server ||= Selenium::Server.new(remote_server_jar,
24
+ :port => Selenium::WebDriver::PortProber.above(4444),
25
+ :log => !!$DEBUG,
26
+ :background => true,
27
+ :timeout => 60)
28
+
29
+ @server.start
30
+ at_exit { @server.stop }
31
+ end
32
+
33
+ def remote_server_jar
34
+ if File.exist?(ENV['REMOTE_SERVER_BINARY'] || '')
35
+ ENV['REMOTE_SERVER_BINARY']
36
+ elsif !Dir.glob('selenium-server-standalone*.jar').empty?
37
+ Dir.glob('selenium-server-standalone*.jar').first
38
+ else
39
+ Selenium::Server.download :latest
40
+ end
41
+ rescue SocketError
42
+ # not connected to internet
43
+ raise Watir::Exception::Error, "unable to find or download selenium-server-standalone jar"
44
+ end
45
+
19
46
  def set_webdriver
20
47
  @imp.name = :webdriver
21
48
  @imp.browser_class = Watir::Browser
@@ -63,29 +90,27 @@ class ImplementationConfig
63
90
  end
64
91
 
65
92
  def set_guard_proc
66
- matching_browser = remote? ? remote_browser : browser
67
- browser_instance = WatirSpec.new_browser
68
- browser_version = browser_instance.driver.capabilities.version
69
- matching_browser_with_version = "#{matching_browser}#{browser_version}".to_sym
70
- matching_guards = [
71
- :webdriver, # guard only applies to webdriver
72
- matching_browser, # guard only applies to this browser
73
- matching_browser_with_version, # guard only applies to this browser with specific version
74
- [:webdriver, matching_browser], # guard only applies to this browser on webdriver
75
- [:webdriver, matching_browser_with_version], # guard only applies to this browser with specific version on webdriver
76
- [matching_browser, Selenium::WebDriver::Platform.os] # guard only applies to this browser with this OS
77
- ]
78
-
79
- if native_events?
80
- # guard only applies to this browser on webdriver with native events enabled
81
- matching_guards << [:webdriver, matching_browser, :native_events]
82
- matching_guards << [:webdriver, matching_browser_with_version, :native_events]
93
+ matching_guards = [:webdriver]
94
+
95
+ if remote?
96
+ matching_browser = remote_browser
97
+ matching_guards << :remote
98
+ matching_guards << [:remote, matching_browser]
83
99
  else
84
- # guard only applies to this browser on webdriver with native events disabled
85
- matching_guards << [:webdriver, matching_browser, :synthesized_events]
86
- matching_guards << [:webdriver, matching_browser_with_version, :synthesized_events]
100
+ matching_browser = browser
87
101
  end
88
102
 
103
+ browser_instance = WatirSpec.new_browser
104
+ browser_version = browser_instance.driver.capabilities.version
105
+
106
+ matching_browser_with_version = "#{browser}#{browser_version}".to_sym
107
+ matching_guards << matching_browser_with_version if browser_version
108
+ matching_guards << [:webdriver, matching_browser_with_version]
109
+
110
+ matching_guards << matching_browser
111
+ matching_guards << [:webdriver, matching_browser]
112
+ matching_guards << [matching_browser, Selenium::WebDriver::Platform.os]
113
+
89
114
  if !Selenium::WebDriver::Platform.linux? || ENV['DESKTOP_SESSION']
90
115
  # some specs (i.e. Window#maximize) needs a window manager on linux
91
116
  matching_guards << [:webdriver, matching_browser, :window_manager]
@@ -100,16 +125,12 @@ class ImplementationConfig
100
125
  end
101
126
 
102
127
  def firefox_args
103
- profile = Selenium::WebDriver::Firefox::Profile.new
104
- profile.native_events = native_events?
105
-
106
- [:firefox, {profile: profile}]
128
+ [:firefox, {}]
107
129
  end
108
130
 
109
131
  def chrome_args
110
132
  opts = {
111
- args: ["--disable-translate"],
112
- native_events: native_events?
133
+ args: ["--disable-translate"]
113
134
  }
114
135
 
115
136
  if url = ENV['WATIR_WEBDRIVER_CHROME_SERVER']
@@ -132,7 +153,10 @@ class ImplementationConfig
132
153
  end
133
154
 
134
155
  def remote_args
135
- [:remote, {url: ENV["WATIR_WEBDRIVER_REMOTE_URL"] || "http://127.0.0.1:8080"}]
156
+ url = ENV["REMOTE_SERVER_URL"] || "http://127.0.0.1:#{@server.port}/wd/hub"
157
+ remote_browser_name = ENV['REMOTE_BROWSER'].to_sym
158
+ caps = Selenium::WebDriver::Remote::Capabilities.send(remote_browser_name)
159
+ [:remote, {url: url, desired_capabilities: caps}]
136
160
  end
137
161
 
138
162
  def add_html_routes
@@ -147,24 +171,7 @@ class ImplementationConfig
147
171
  end
148
172
 
149
173
  def remote_browser
150
- remote_browser = WatirSpec.new_browser
151
- remote_browser.browser.name
152
- ensure
153
- remote_browser.close
154
- end
155
-
156
- def native_events?
157
- if ENV['NATIVE_EVENTS'] == "true"
158
- true
159
- elsif ENV['NATIVE_EVENTS'] == "false" && !ie?
160
- false
161
- else
162
- native_events_by_default?
163
- end
164
- end
165
-
166
- def native_events_by_default?
167
- Selenium::WebDriver::Platform.windows? && [:firefox, :internet_explorer].include?(browser)
174
+ @remote_browser ||= (ENV['REMOTE_BROWSER'] || :firefox).to_sym
168
175
  end
169
176
 
170
177
  class SelectorListener < Selenium::WebDriver::Support::AbstractEventListener
@@ -1,13 +1,19 @@
1
1
  require 'active_support/ordered_hash'
2
2
 
3
3
  module LocatorSpecHelper
4
+ def browser
5
+ @browser ||= double(Watir::Browser, wd: driver)
6
+ end
7
+
4
8
  def driver
5
9
  @driver ||= double(Selenium::WebDriver::Driver)
6
10
  end
7
11
 
8
12
  def locator(selector, attrs)
9
13
  attrs ||= Watir::HTMLElement.attributes
10
- Watir::ElementLocator.new(driver, selector, attrs)
14
+ element_validator = Watir::Locators::Element::Validator.new
15
+ selector_builder = Watir::Locators::Element::SelectorBuilder.new(driver, selector, attrs)
16
+ Watir::Locators::Element::Locator.new(browser, selector, selector_builder, element_validator)
11
17
  end
12
18
 
13
19
  def expect_one(*args)
@@ -31,7 +37,7 @@ module LocatorSpecHelper
31
37
  el = double(Watir::Element, opts)
32
38
 
33
39
  attrs.each do |key, value|
34
- el.stub(:attribute).with(key).and_return(value)
40
+ allow(el).to receive(:attribute).with(key).and_return(value)
35
41
  end if attrs
36
42
 
37
43
  el
@@ -1,4 +1,4 @@
1
- #/bin/sh
1
+ #!/bin/bash
2
2
 
3
3
  set -e
4
4
  set -x
@@ -6,19 +6,30 @@ set -x
6
6
  sh -e /etc/init.d/xvfb start
7
7
  git submodule update --init
8
8
 
9
- mkdir ~/.yard
10
- bundle exec yard config -a autoload_plugins yard-doctest
9
+ if [[ "$RAKE_TASK" = "yard:doctest" ]]; then
10
+ mkdir ~/.yard
11
+ bundle exec yard config -a autoload_plugins yard-doctest
12
+ fi
11
13
 
12
14
  if [[ "$RAKE_TASK" = "spec:chrome" ]]; then
13
- export CHROME_REVISION=`curl -s http://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/LAST_CHANGE`
14
- export CHROMEDRIVER_VERSION=`curl -s http://chromedriver.storage.googleapis.com/LATEST_RELEASE`
15
-
15
+ # https://omahaproxy.appspot.com
16
+ # https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/
17
+ CHROME_REVISION=386257
16
18
  curl -L -O "http://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/${CHROME_REVISION}/chrome-linux.zip"
17
19
  unzip chrome-linux.zip
18
20
 
21
+ CHROMEDRIVER_VERSION=$(curl -s http://chromedriver.storage.googleapis.com/LATEST_RELEASE)
19
22
  curl -L -O "http://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip"
20
23
  unzip chromedriver_linux64.zip
21
24
 
22
25
  mv chromedriver chrome-linux/chromedriver
23
26
  chmod +x chrome-linux/chromedriver
24
27
  fi
28
+
29
+ if [[ "$RAKE_TASK" = "spec:phantomjs" ]]; then
30
+ curl -L -O "https://bintray.com/artifact/download/tfortner/phantomjs-clone/p/phantomjs"
31
+ chmod +x phantomjs
32
+
33
+ mv phantomjs travis-phantomjs/phantomjs
34
+ phantomjs --version
35
+ fi
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watir-webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jari Bakken
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-14 00:00:00.000000000 Z
11
+ date: 2016-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
@@ -214,6 +214,7 @@ files:
214
214
  - lib/watir-webdriver/element_collection.rb
215
215
  - lib/watir-webdriver/elements/area.rb
216
216
  - lib/watir-webdriver/elements/button.rb
217
+ - lib/watir-webdriver/elements/cell.rb
217
218
  - lib/watir-webdriver/elements/checkbox.rb
218
219
  - lib/watir-webdriver/elements/dlist.rb
219
220
  - lib/watir-webdriver/elements/element.rb
@@ -228,6 +229,7 @@ files:
228
229
  - lib/watir-webdriver/elements/link.rb
229
230
  - lib/watir-webdriver/elements/option.rb
230
231
  - lib/watir-webdriver/elements/radio.rb
232
+ - lib/watir-webdriver/elements/row.rb
231
233
  - lib/watir-webdriver/elements/select.rb
232
234
  - lib/watir-webdriver/elements/svg_elements.rb
233
235
  - lib/watir-webdriver/elements/table.rb
@@ -256,12 +258,26 @@ files:
256
258
  - lib/watir-webdriver/generator/svg/spec_extractor.rb
257
259
  - lib/watir-webdriver/generator/svg/visitor.rb
258
260
  - lib/watir-webdriver/has_window.rb
259
- - lib/watir-webdriver/locators/button_locator.rb
260
- - lib/watir-webdriver/locators/child_cell_locator.rb
261
- - lib/watir-webdriver/locators/child_row_locator.rb
262
- - lib/watir-webdriver/locators/element_locator.rb
263
- - lib/watir-webdriver/locators/text_area_locator.rb
264
- - lib/watir-webdriver/locators/text_field_locator.rb
261
+ - lib/watir-webdriver/locators.rb
262
+ - lib/watir-webdriver/locators/button/locator.rb
263
+ - lib/watir-webdriver/locators/button/selector_builder.rb
264
+ - lib/watir-webdriver/locators/button/selector_builder/xpath.rb
265
+ - lib/watir-webdriver/locators/button/validator.rb
266
+ - lib/watir-webdriver/locators/cell/locator.rb
267
+ - lib/watir-webdriver/locators/cell/selector_builder.rb
268
+ - lib/watir-webdriver/locators/element/locator.rb
269
+ - lib/watir-webdriver/locators/element/selector_builder.rb
270
+ - lib/watir-webdriver/locators/element/selector_builder/css.rb
271
+ - lib/watir-webdriver/locators/element/selector_builder/xpath.rb
272
+ - lib/watir-webdriver/locators/element/validator.rb
273
+ - lib/watir-webdriver/locators/row/locator.rb
274
+ - lib/watir-webdriver/locators/row/selector_builder.rb
275
+ - lib/watir-webdriver/locators/text_area/locator.rb
276
+ - lib/watir-webdriver/locators/text_area/selector_builder.rb
277
+ - lib/watir-webdriver/locators/text_field/locator.rb
278
+ - lib/watir-webdriver/locators/text_field/selector_builder.rb
279
+ - lib/watir-webdriver/locators/text_field/selector_builder/xpath.rb
280
+ - lib/watir-webdriver/locators/text_field/validator.rb
265
281
  - lib/watir-webdriver/row_container.rb
266
282
  - lib/watir-webdriver/screenshot.rb
267
283
  - lib/watir-webdriver/user_editable.rb
@@ -305,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
305
321
  version: '0'
306
322
  requirements: []
307
323
  rubyforge_project: watir-webdriver
308
- rubygems_version: 2.4.8
324
+ rubygems_version: 2.4.5.1
309
325
  signing_key:
310
326
  specification_version: 4
311
327
  summary: Watir on WebDriver
@@ -321,4 +337,3 @@ test_files:
321
337
  - spec/locator_spec_helper.rb
322
338
  - spec/spec_helper.rb
323
339
  - spec/special_chars_spec.rb
324
- has_rdoc: