watirmark 5.27.2 → 5.28.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2cd92d1a9b252f89b9bd5d392fd880321ea5eee0
4
- data.tar.gz: 87d2a5c9088b3c8eaa7fe58fdc51618de4b56c19
3
+ metadata.gz: e78eaa4edbdd389f9e45df9a84d9c31cc6d67768
4
+ data.tar.gz: 8801907ff42e5266d2b5a7756fbe70ce780353eb
5
5
  SHA512:
6
- metadata.gz: ffd2177cd8b04c599fb803f4ab52e611b85da37a3ac8c72547549d693475084b342c43c769eee7a3c3a449e9196bedea140d43765462400826333770c9d3ec2d
7
- data.tar.gz: 9b45889cebcc93fb2c6f5124e9d191f152c6443e2e94ec32cd9b6b23c04aea862c9b3df5113aebff0296be548301d9ac1ce47c660657f62dab7a7068e036051e
6
+ metadata.gz: a3f23b508646544a92d9a9bc8df2aa7b1d4ad54d9c1795e526c2d2bb7b4a064f621f6628746bf210f58c5ccbe36eb11fe5f1315e312acd09d5367a41d1bac87c
7
+ data.tar.gz: e687c597de0e65e999969bd4f7bd862faa9487396a1a2133921a8c15d344308dc9e6f1c97a7c641411a77a040ac9c3a5549b6e2cb548aedf88ec9c843f14ed22
@@ -23,6 +23,10 @@ module Watirmark
23
23
  :uuid => nil,
24
24
  :webdriver => :firefox,
25
25
  :headless => false,
26
+ :always_locate => true,
27
+ :prefer_css => false,
28
+ :watir_timeout => 30,
29
+ :http_timeout => 60,
26
30
  # database
27
31
  :dbhostname => nil,
28
32
  :dbusername => nil,
@@ -123,14 +123,16 @@ module Watirmark
123
123
 
124
124
  def populate_keyword_value(keyed_element)
125
125
  call_method_if_exists("populate_#{keyed_element.keyword}") do
126
- # for the first element on a page we populate, wait for it to appear
127
- @view.send(keyed_element.keyword).send(:wait_until_present) unless @seen_value
126
+ @view.send(keyed_element.keyword).wait_until_present unless @view.send(keyed_element.keyword).kind_of? Watir::Radio
128
127
  @view.send("#{keyed_element.keyword}=", value(keyed_element))
129
128
  end
130
129
  end
131
130
 
132
131
  def verify_keyword_value(keyed_element)
133
- call_method_if_exists("verify_#{keyed_element.keyword}") {assert_equal(keyed_element.get, value(keyed_element))}
132
+ call_method_if_exists("verify_#{keyed_element.keyword}") do
133
+ keyed_element.get.wait_until_present
134
+ assert_equal(keyed_element.get, value(keyed_element))
135
+ end
134
136
  end
135
137
 
136
138
  def keyword_value(keyed_element)
@@ -1,33 +1,32 @@
1
1
  module Watirmark
2
2
  module Dialogs
3
+
4
+ def current_window_index
5
+ current_window = Page.browser.window
6
+ Page.browser.windows.find_index(current_window)
7
+ end
8
+
3
9
  def modal_exists?
4
- !!(Page.browser.windows.size > 1)
10
+ Page.browser.window(index: current_window_index+1).exists?
5
11
  end
6
12
 
7
- def with_modal_dialog
13
+ def wait_for_modal_dialog
14
+ Watir::Wait.until { modal_exists? }
15
+ rescue TimeoutError
16
+ raise Watirmark::TestError, 'Timed out while waiting for modal dialog to open'
17
+ end
18
+
19
+ def with_modal_dialog &blk
8
20
  wait_for_modal_dialog
9
- parent_window = (Page.browser.windows.size) - 2
10
- begin
11
- Page.browser.windows.last.use
12
- Page.browser.wait
13
- yield
14
- ensure
15
- Page.browser.windows[parent_window].use
16
- end
21
+ Page.browser.windows.last.use &blk
17
22
  end
18
23
 
19
- def wait_for_modal_dialog
20
- begin
21
- Timeout::timeout(30) {
22
- until modal_exists?
23
- sleep 0.002
24
- end
25
- Page.browser.wait
26
- sleep 0.02
27
- }
28
- rescue Timeout::Error
29
- raise Watirmark::TestError, 'Timed out while waiting for modal dialog to open'
30
- end
24
+ def close_chrome_windows
25
+ Page.browser.windows(url: /chrome-extension/).each {|win| win.close}
26
+ end
27
+
28
+ def close_modal_window
29
+ Page.browser.window(index: current_window_index+1).close if Page.browser.windows.size >= current_window_index
31
30
  end
32
31
  end
33
- end
32
+ end
@@ -8,10 +8,11 @@ module CukeHelper
8
8
  end
9
9
 
10
10
  def eval_keywords(hash)
11
+ newhash = {}
11
12
  hash.each do |key, value|
12
- hash[key] = format_value(value)
13
+ newhash[key] = format_value(value)
13
14
  end
14
- hash
15
+ newhash
15
16
  end
16
17
 
17
18
  # when the input is an array, eval each element
@@ -27,20 +27,36 @@ module EmailHelper
27
27
  end
28
28
 
29
29
  # Read the contents of an email, cache it and delete the email
30
- def read_email(model, subject, timeout=30)
31
- email_content = qa_inbox(model).get_email_text(["SUBJECT", subject, "TO", model.email], timeout)
30
+ def read_email(model, options_hash, timeout=30)
31
+ Kernel.raise ArgumentError, 'The options provided are not in the form of a hash, i.e. {:subject => "subject"}' unless options_hash.is_a?(Hash)
32
+ search_array = options_hash_to_array(options_hash)
33
+ email_content = qa_inbox(model).get_email_text(search_array, timeout)
32
34
  email[model.model_name] = EmailBody.new(email_content)
33
35
  end
34
36
 
37
+ def options_hash_to_array(hash_of_search_params)
38
+ converted_array = Array.new
39
+ hash_of_search_params.each do | search_key, search_value |
40
+ converted_array << search_key.to_s.upcase
41
+ converted_array << search_value.to_s
42
+ end
43
+ converted_array
44
+ end
45
+
35
46
  def read_email_from(model, from, timeout=30)
36
- email_content = qa_inbox(model).get_email_text(["FROM", from, "TO", model.email], timeout)
37
- email[model.model_name] = EmailBody.new(email_content)
47
+ Kernel.warn(self.to_s + ':>' + Kernel.__callee__.to_s + ': This method is deprecated, please use read_email')
48
+ read_email(model, {:from => from, :to => model.email}, timeout)
38
49
  end
39
50
 
40
51
  def read_email_replyto(model, from, timeout=30)
41
52
  qa_inbox(model).get_email_replyto(["FROM", from, "TO", model.email], timeout)
42
53
  end
43
54
 
55
+ def read_email_subject_and_from(model, from, subject, timeout=30)
56
+ Kernel.warn(self.to_s + ':>' + Kernel.__callee__.to_s + ': This method is deprecated, please use read_email')
57
+ read_email(model, {:from => from, :to => model.email, :subject => subject}, timeout)
58
+ end
59
+
44
60
  def log_email(model)
45
61
  Watirmark.logger.info "Email Received"
46
62
  Watirmark.logger.info email[model.model_name].body.inspect
@@ -1,38 +1,7 @@
1
1
  require 'watir-webdriver/extensions/select_text'
2
2
 
3
- Watir::always_locate = false
4
-
5
3
  module Watir
6
4
 
7
- class Browser
8
- # for modal dialogs that close on submission, these might
9
- # fail to run because the window has been destroyed
10
- alias :old_run_checkers :run_checkers
11
-
12
- # this is basically a check to make sure we're not
13
- # running the checkers on a modal dialog that has closed
14
- # by the time the checkers have run
15
- def run_checkers
16
- @error_checkers.each do |checker|
17
- begin
18
- checker.call(self)
19
- rescue Selenium::WebDriver::Error::UnknownError, Selenium::WebDriver::Error::NoSuchWindowError => e
20
- Watirmark.logger.warn "Unable to run checker: #{e.message}"
21
- break
22
- end
23
- end
24
- end
25
- end
26
-
27
- # Trigger checkers when manually submitting a form
28
- class Form < HTMLElement
29
- alias :old_submit :submit
30
- def submit
31
- old_submit
32
- browser.run_checkers
33
- end
34
- end
35
-
36
5
  module Container
37
6
  alias :row :tr
38
7
  alias :cell :td
@@ -79,6 +48,11 @@ module Watir
79
48
  end
80
49
  end
81
50
 
51
+ module Atoms
52
+ ATOMS[:getPreviousSibling] = File.read(File.expand_path("../atoms/getPreviousSibling.js", __FILE__))
53
+ ATOMS[:getNextSibling] = File.read(File.expand_path("../atoms/getNextSibling.js", __FILE__))
54
+ end
55
+
82
56
  class Table < HTMLElement
83
57
  def each
84
58
  rows.each { |x| yield x }
@@ -136,30 +110,85 @@ module Watir
136
110
  end
137
111
 
138
112
  class Element
139
- begin
140
- alias :prev_sibling :previous_sibling
141
- alias :prevsibling :previous_sibling
142
- alias :nextsibling :next_sibling
143
- rescue NameError
144
- # not using convio-specific webdriver. Ignore and continue
113
+
114
+ def next_sibling
115
+ e = locate_dom_element(:getNextSibling)
116
+ e.nil? ? element(xpath: './following-sibling::*') : e
117
+ end
118
+ alias_method :nextsibling, :next_sibling
119
+
120
+ def previous_sibling
121
+ e = locate_dom_element(:getPreviousSibling)
122
+ e.nil? ? element(xpath: './preceding-sibling::*') : e
123
+ end
124
+ alias_method :prev_sibling, :previous_sibling
125
+ alias_method :prevsibling, :previous_sibling
126
+
127
+ def locate_dom_element(method)
128
+ assert_exists
129
+
130
+ e = element_call { execute_atom method, @element }
131
+
132
+ if e.kind_of?(Selenium::WebDriver::Element)
133
+ Watir.element_class_for(e.tag_name.downcase).new(@parent, :element => e)
134
+ end
135
+ end
136
+
137
+ alias_method :old_element_call, :element_call
138
+ def element_call &block
139
+ old_element_call &block
140
+ rescue Selenium::WebDriver::Error::UnknownError => ex
141
+ raise unless ex.message.include?("Element is not clickable at point")
142
+ reset!
143
+ assert_exists
144
+ retry
145
+ end
146
+
147
+ alias_method :old_text, :text
148
+ def text
149
+ old_text.strip
145
150
  end
146
151
 
147
152
  def click_if_exists
148
153
  click if exists?
149
154
  end
150
155
 
151
- alias :click_no_wait :click
156
+ alias_method :click_no_wait, :click
152
157
  end
153
158
 
154
159
  class TextFieldLocator
155
- def validate_element(element)
160
+ def check_deprecation(element)
156
161
  if element.tag_name.downcase == 'textarea'
157
162
  warn "Locating textareas with '#text_field' is deprecated. Please, use '#textarea' method instead for #{@selector}"
158
163
  end
159
- super
160
164
  end
161
165
  end
162
166
 
167
+ class IFrame < HTMLElement
168
+ alias_method :old_switch_to!, :switch_to!
169
+ def switch_to!
170
+ retry_attempts ||= 0
171
+ old_switch_to!
172
+ rescue Watir::Exception::UnknownFrameException
173
+ # UnknownFrameException is workaround for- https://code.google.com/p/chromedriver/issues/detail?id=948
174
+ retry_attempts += 1
175
+ retry if retry_attempts == 1
176
+ end
177
+ end
178
+
179
+ class Alert
180
+ alias_method :old_text, :text
181
+ def text
182
+ old_text.strip
183
+ end
184
+ end
185
+
186
+ class Browser
187
+ alias_method :old_text, :text
188
+ def text
189
+ old_text.strip
190
+ end
191
+ end
163
192
 
164
193
  end
165
194
 
@@ -182,4 +211,4 @@ module Selenium
182
211
  end
183
212
  end
184
213
  end
185
- end
214
+ end
@@ -24,7 +24,9 @@ module Watirmark
24
24
  end
25
25
 
26
26
  def insert_model(text)
27
- return text unless text.class == String || text.class == Cucumber::Ast::DocString
27
+ # cucumber 2.0 defines a Core module between Cucumber and Ast
28
+ doc_class = Cucumber::Ast.const_defined?(:DocString) ? Cucumber::Ast::DocString : Cucumber::Core::Ast::DocString
29
+ return text unless text.is_a?(String) || text.is_a?(doc_class)
28
30
  result = text
29
31
  method_regexp = /\[([^\[\]]+)\]\.(\w+)/
30
32
  model_regexp = /\[([^\[\]]+)\]/
@@ -109,6 +109,7 @@ module Watirmark
109
109
  hash.each_pair { |key, value| send "#{key}=", value }
110
110
  self
111
111
  end
112
+ alias :has :update
112
113
 
113
114
 
114
115
  # Update the model using the provided hash but only if exists (TODO: may not be needed any more)
@@ -47,7 +47,9 @@ module Watirmark
47
47
  end
48
48
 
49
49
  def keywords(*args)
50
- @keys = [*args].flatten
50
+ @keys ||= []
51
+ @keys += [*args].flatten
52
+ @keys = @keys.uniq
51
53
  end
52
54
 
53
55
  private
@@ -21,6 +21,7 @@ module Watirmark
21
21
  def get *args
22
22
  @process_page.activate
23
23
  watir_object = @context.instance_exec(*args, &@block)
24
+ return if watir_object.nil?
24
25
  watir_object.extend(KeywordMethods)
25
26
  watir_object.radio_map = @map if @map
26
27
  watir_object.keyword = @keyword
@@ -29,7 +30,6 @@ module Watirmark
29
30
 
30
31
  def set val
31
32
  return if val.nil?
32
- @process_page.activate
33
33
  element = get
34
34
  val = @map.lookup(val) if @map
35
35
  case val
@@ -117,6 +117,10 @@ module Watirmark
117
117
  end
118
118
 
119
119
  def openbrowser
120
+ Watir.default_timeout = config.watir_timeout
121
+ Watir.prefer_css = config.prefer_css
122
+ Watir.always_locate = config.always_locate
123
+
120
124
  use_headless_display if config.headless
121
125
  Page.browser = new_watir_browser
122
126
  initialize_page_checkers
@@ -162,15 +166,16 @@ module Watirmark
162
166
  end
163
167
 
164
168
  def new_watir_browser
165
- config.webdriver ||= :firefox
166
- if config.webdriver.to_sym == :firefox
167
- Watir::Browser.new config.webdriver.to_sym, :profile => config.firefox_profile
168
- elsif config.webdriver.to_sym == :firefox_proxy
169
- Watir::Browser.new :firefox, :profile => config.firefox_profile
170
- elsif config.webdriver.to_sym == :sauce
169
+ client = Selenium::WebDriver::Remote::Http::Default.new
170
+ client.timeout = config.http_timeout
171
+
172
+ case config.webdriver.to_sym
173
+ when :firefox, :firefox_proxy
174
+ Watir::Browser.new :firefox, profile: config.firefox_profile, http_client: client
175
+ when :sauce
171
176
  Watir::Browser.new use_sauce
172
177
  else
173
- Watir::Browser.new config.webdriver.to_sym
178
+ Watir::Browser.new config.webdriver.to_sym, http_client: client
174
179
  end
175
180
  end
176
181
 
@@ -1,5 +1,5 @@
1
1
  module Watirmark
2
2
  module Version
3
- STRING = '5.27.2'
3
+ STRING = '5.28.0'
4
4
  end
5
5
  end
@@ -96,9 +96,8 @@ describe Watirmark::WebPage::Controller do
96
96
  end
97
97
 
98
98
  specify 'should be able to create and use a new keyword' do
99
- view = TestView.new
100
- view.send("#{@keyword}=", 'test')
101
- expect(view.send(@keyword).value == 'test' ).to be_true
99
+ TestView.new.send("#{@keyword}=", 'test')
100
+ expect { @controller.send(@keyword).value == 'text' }.to be_true
102
101
  end
103
102
 
104
103
  specify 'should be able to populate' do
@@ -0,0 +1,29 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe "Testing helpers for email_helper's read_email method" do
4
+
5
+ it "should return an array of options given a hash" do
6
+ test_collection = EmailHelper::EmailCollection
7
+ option_hash = {:from => "foo@bar.com",
8
+ :to => "bar@foo.com",
9
+ :subject => "Foo Bar"}
10
+ transformed_options = test_collection.options_hash_to_array(option_hash)
11
+ transformed_options.is_a?(Array).should == true
12
+ option_hash.each_with_index do | keyvalue, index |
13
+ key = keyvalue[0]
14
+ value = keyvalue[1]
15
+ transformed_options[index*2].downcase.to_sym.should == key
16
+ transformed_options[index*2].should == key.to_s.upcase
17
+ transformed_options[index*2 + 1].should == value
18
+ end
19
+ end
20
+
21
+ it "should throw an argument exception because of the options parameter" do
22
+ test_collection = EmailHelper::EmailCollection
23
+ option_hash = ["Subject", "subject"]
24
+ dummy_model = Watirmark::Model::Factory.new
25
+ expect { test_collection.read_email(dummy_model,option_hash) }.to raise_error(ArgumentError)
26
+ expect { test_collection.read_email(dummy_model, nil)}.to raise_error(ArgumentError)
27
+ end
28
+
29
+ end
@@ -520,6 +520,22 @@ describe "keywords" do
520
520
  last_name { "Last #{uuid}" }
521
521
  end
522
522
  end
523
+
524
+ class MultipleKeywordsModel < Watirmark::Model::Factory
525
+ keywords :first_name
526
+ keywords :last_name
527
+ defaults do
528
+ first_name { "First" }
529
+ last_name {"Last"}
530
+ end
531
+ end
532
+
533
+ class DuplicateKeywordsModel < Watirmark::Model::Factory
534
+ keywords :first_name, :first_name
535
+ defaults do
536
+ first_name { "First" }
537
+ end
538
+ end
523
539
  end
524
540
  end
525
541
 
@@ -541,6 +557,18 @@ describe "keywords" do
541
557
  FactoryTest::SomeModel.new.keywords.sort.should == [:first_name, :middle_name, :last_name].sort
542
558
  end
543
559
 
560
+ specify "should be able to support multiple calls to keywords method" do
561
+ a = FactoryTest::MultipleKeywordsModel.new
562
+ a.first_name.should == "First"
563
+ a.keywords.include?(:last_name).should == true
564
+ a.last_name.should == "Last"
565
+ end
566
+
567
+ specify "should not contain duplicate values in the keywords" do
568
+ a = FactoryTest::DuplicateKeywordsModel.new
569
+ a.keywords.size.should == 1
570
+ end
571
+
544
572
  end
545
573
 
546
574
  describe "subclassing" do
@@ -549,6 +577,10 @@ describe "subclassing" do
549
577
  trait :some_trait do
550
578
  full_name { "full_name" }
551
579
  end
580
+
581
+ trait :new_trait do
582
+ dog_name {"sugar"}
583
+ end
552
584
  end
553
585
  module FactoryTest
554
586
  class BaseModel < Watirmark::Model::Factory
@@ -572,6 +604,19 @@ describe "subclassing" do
572
604
 
573
605
  class NoDefaultModel < BaseModel
574
606
  end
607
+
608
+ class KeywordsSubModel < BaseModel
609
+ keywords :middle_name, :cat_name, :dog_name
610
+ traits :new_trait
611
+ defaults do
612
+ middle_name {'middle_name'}
613
+ cat_name {'Annie'}
614
+ end
615
+ end
616
+
617
+ class DuplicateKeywordsSubModel < BaseModel
618
+ keywords :first_name
619
+ end
575
620
  end
576
621
  end
577
622
 
@@ -588,10 +633,25 @@ describe "subclassing" do
588
633
  end
589
634
 
590
635
  specify "submodel should be able to override defaults" do
591
- FactoryTest::SubModel.new.first_name.should == 'sub_first_name'
592
- FactoryTest::SubModel.new.last_name.should == 'sub_last_name'
593
- FactoryTest::SubModel.new.attr_test.should == 'I came from SubModel'
594
- FactoryTest::SubModel.new.base_attr.should == 'This is a base attribute'
636
+ a = FactoryTest::SubModel.new
637
+ a.first_name.should == 'sub_first_name'
638
+ a.last_name.should == 'sub_last_name'
639
+ a.attr_test.should == 'I came from SubModel'
640
+ a.base_attr.should == 'This is a base attribute'
641
+ end
642
+
643
+ specify "submodel should be able to add new keywords to the inherited set" do
644
+ a = FactoryTest::KeywordsSubModel.new
645
+ a.middle_name.should == 'middle_name'
646
+ a.keywords.include?(:first_name).should == true
647
+ a.cat_name.should == 'Annie'
648
+ a.first_name.should == 'base_first_name'
649
+ a.dog_name.should == 'sugar'
650
+ end
651
+
652
+ specify "should not have duplicate keywords after inheritance" do
653
+ a = FactoryTest::DuplicateKeywordsSubModel.new
654
+ a.keywords.select{|x| x == :first_name}.size.should == 1
595
655
  end
596
656
 
597
657
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  lib_dir = File.join(File.dirname(__FILE__), '..', 'lib')
2
2
  $: << File.expand_path(lib_dir)
3
+ $: << File.expand_path(lib_dir + '/watirmark/cucumber')
3
4
 
4
5
  ENV['WEBDRIVER'] = 'firefox'
5
6
 
@@ -7,6 +8,7 @@ ENV['WEBDRIVER'] = 'firefox'
7
8
  require 'rspec/autorun'
8
9
  require 'watirmark'
9
10
  require 'watirmark/configuration'
11
+ require 'watirmark/cucumber/email_helper'
10
12
 
11
13
  Watirmark.logger.level = Logger::FATAL
12
14
 
@@ -0,0 +1,73 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe Watir::Element do
4
+ before :all do
5
+ @html = File.expand_path(File.dirname(__FILE__) + '/html/controller.html')
6
+ end
7
+
8
+ before :each do
9
+ Page.browser.goto "file://#{@html}"
10
+ end
11
+
12
+ describe '#previous_sibling' do
13
+ specify 'prevsibling, prev_sibling, and previous_sibling return same element' do
14
+ element = Page.browser.option(:text => 'b')
15
+ prevsibling_el = element.prevsibling
16
+ prev_sibling_el = element.prev_sibling
17
+ previous_sibling_el = element.previous_sibling
18
+ expect(prevsibling_el).to eq(prev_sibling_el)
19
+ expect(prev_sibling_el).to eq(previous_sibling_el)
20
+ end
21
+
22
+ specify 'can get previous sibling object even though sibling does not exist' do
23
+ element = Page.browser.option(:text => 'a')
24
+ sib = element.previous_sibling
25
+ expect(sib.class).to eq(Watir::HTMLElement)
26
+ expect(sib.exists?).to eq(false)
27
+ end
28
+
29
+ specify 'can get child object for nonexistent previous sibling and does not raise exception, just returns false' do
30
+ element = Page.browser.option(:text => 'a')
31
+ child = element.previous_sibling.element(:text => 'doesntmatter')
32
+ expect(child.class).to eq(Watir::HTMLElement)
33
+ expect(child.exists?).to eq(false)
34
+ end
35
+
36
+ specify 'can get previous sibling object and evaluate it does exist' do
37
+ element = Page.browser.option(:text => 'b')
38
+ sib = element.previous_sibling
39
+ expect(sib.exist?).to eq(true)
40
+ expect(sib.html).to eq('<option value="a">a</option>')
41
+ end
42
+ end
43
+
44
+ describe '#next_sibling' do
45
+ specify 'nextsibling and next_sibling return same element' do
46
+ element = Page.browser.option(:text => 'b')
47
+ nextsibling_el = element.nextsibling
48
+ next_sibling_el = element.next_sibling
49
+ expect(nextsibling_el).to eq(next_sibling_el)
50
+ end
51
+
52
+ specify 'can get following sibling object even though sibling does not exist' do
53
+ element = Page.browser.option(:text => 'c')
54
+ sib = element.next_sibling
55
+ expect(sib.class).to eq(Watir::HTMLElement)
56
+ expect(sib.exists?).to eq(false)
57
+ end
58
+
59
+ specify 'can get child object for nonexistent following sibling and does not raise exception, just returns false' do
60
+ element = Page.browser.option(:text => 'c')
61
+ child = element.next_sibling.element(:text => 'doesntmatter')
62
+ expect(child.class).to eq(Watir::HTMLElement)
63
+ expect(child.exists?).to eq(false)
64
+ end
65
+
66
+ specify 'can get following sibling object and evaluate it does exist' do
67
+ element = Page.browser.option(:text => 'b')
68
+ sib = element.next_sibling
69
+ expect(sib.exist?).to eq(true)
70
+ expect(sib.html).to eq('<option value="c">c</option>')
71
+ end
72
+ end
73
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watirmark
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.27.2
4
+ version: 5.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hugh McGowan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-21 00:00:00.000000000 Z
11
+ date: 2015-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: watir-webdriver
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.2
19
+ version: 0.7.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.6.2
26
+ version: 0.7.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: american_date
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -199,12 +199,14 @@ files:
199
199
  - spec/controller_actions_spec.rb
200
200
  - spec/controller_spec.rb
201
201
  - spec/controllers_and_models_spec.rb
202
+ - spec/helper_methods_spec.rb
202
203
  - spec/model_factory_spec.rb
203
204
  - spec/model_traits_spec.rb
204
205
  - spec/page_spec.rb
205
206
  - spec/process_page_spec.rb
206
207
  - spec/session_spec.rb
207
208
  - spec/spec_helper.rb
209
+ - spec/watir_webdriver_spec.rb
208
210
  homepage: http://github.com/convio/watirmark
209
211
  licenses: []
210
212
  metadata: {}
@@ -224,19 +226,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
226
  version: '0'
225
227
  requirements: []
226
228
  rubyforge_project:
227
- rubygems_version: 2.2.2
229
+ rubygems_version: 2.4.6
228
230
  signing_key:
229
231
  specification_version: 4
230
- summary: watirmark 5.27.2
232
+ summary: watirmark 5.28.0
231
233
  test_files:
232
- - spec/assertions_spec.rb
233
- - spec/config_spec.rb
234
- - spec/controller_actions_spec.rb
235
- - spec/controller_spec.rb
234
+ - spec/session_spec.rb
235
+ - spec/helper_methods_spec.rb
236
236
  - spec/controllers_and_models_spec.rb
237
+ - spec/process_page_spec.rb
238
+ - spec/page_spec.rb
239
+ - spec/config_spec.rb
237
240
  - spec/model_factory_spec.rb
241
+ - spec/controller_actions_spec.rb
238
242
  - spec/model_traits_spec.rb
239
- - spec/page_spec.rb
240
- - spec/process_page_spec.rb
241
- - spec/session_spec.rb
243
+ - spec/watir_webdriver_spec.rb
242
244
  - spec/spec_helper.rb
245
+ - spec/controller_spec.rb
246
+ - spec/assertions_spec.rb