lapis_lazuli 0.9.0 → 1.0.1

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/lapis_lazuli.gemspec +12 -0
  4. data/lib/lapis_lazuli.rb +1 -1
  5. data/lib/lapis_lazuli/api.rb +1 -1
  6. data/lib/lapis_lazuli/argparse.rb +1 -1
  7. data/lib/lapis_lazuli/browser.rb +1 -1
  8. data/lib/lapis_lazuli/browser/error.rb +1 -1
  9. data/lib/lapis_lazuli/browser/find.rb +1 -1
  10. data/lib/lapis_lazuli/browser/interaction.rb +1 -1
  11. data/lib/lapis_lazuli/browser/remote.rb +1 -1
  12. data/lib/lapis_lazuli/browser/screenshots.rb +1 -1
  13. data/lib/lapis_lazuli/browser/wait.rb +23 -12
  14. data/lib/lapis_lazuli/cli.rb +1 -1
  15. data/lib/lapis_lazuli/cucumber.rb +1 -1
  16. data/lib/lapis_lazuli/generators/cucumber.rb +1 -1
  17. data/lib/lapis_lazuli/generators/cucumber/template/Gemfile +3 -7
  18. data/lib/lapis_lazuli/generators/cucumber/template/README.md +3 -1
  19. data/lib/lapis_lazuli/generators/cucumber/template/config/config.yml +32 -2
  20. data/lib/lapis_lazuli/generators/cucumber/template/config/cucumber.yml +0 -9
  21. data/lib/lapis_lazuli/generators/cucumber/template/features/account.feature +26 -0
  22. data/lib/lapis_lazuli/generators/cucumber/template/features/example.feature +23 -10
  23. data/lib/lapis_lazuli/generators/cucumber/template/features/step_definitions/interaction_steps.rb +135 -7
  24. data/lib/lapis_lazuli/generators/cucumber/template/features/step_definitions/precondition_steps.rb +52 -3
  25. data/lib/lapis_lazuli/generators/cucumber/template/features/step_definitions/validation_steps.rb +44 -0
  26. data/lib/lapis_lazuli/generators/cucumber/template/features/support/env.rb +29 -1
  27. data/lib/lapis_lazuli/generators/cucumber/template/features/support/functions.rb +68 -0
  28. data/lib/lapis_lazuli/generic/xpath.rb +1 -1
  29. data/lib/lapis_lazuli/options.rb +1 -1
  30. data/lib/lapis_lazuli/placeholders.rb +1 -1
  31. data/lib/lapis_lazuli/proxy.rb +1 -1
  32. data/lib/lapis_lazuli/runtime.rb +1 -1
  33. data/lib/lapis_lazuli/scenario.rb +1 -1
  34. data/lib/lapis_lazuli/storage.rb +1 -1
  35. data/lib/lapis_lazuli/version.rb +2 -2
  36. data/lib/lapis_lazuli/versions.rb +1 -1
  37. data/lib/lapis_lazuli/world/annotate.rb +1 -1
  38. data/lib/lapis_lazuli/world/api.rb +1 -1
  39. data/lib/lapis_lazuli/world/browser.rb +1 -1
  40. data/lib/lapis_lazuli/world/config.rb +1 -1
  41. data/lib/lapis_lazuli/world/error.rb +1 -1
  42. data/lib/lapis_lazuli/world/hooks.rb +1 -1
  43. data/lib/lapis_lazuli/world/logging.rb +1 -1
  44. data/lib/lapis_lazuli/world/proxy.rb +1 -1
  45. data/lib/lapis_lazuli/world/variable.rb +1 -1
  46. data/test/Gemfile +10 -33
  47. data/test/features/step_definitions/interaction_steps.rb +25 -3
  48. data/test/features/step_definitions/validation_steps.rb +265 -230
  49. data/test/features/timing.feature +40 -4
  50. data/test/server/www/timing.html +15 -0
  51. metadata +90 -4
@@ -11,7 +11,7 @@ Given(/^I navigate to the (.*) test page$/) do |page|
11
11
  config = "server.url"
12
12
  if has_env?(config)
13
13
  url = env(config)
14
- browser.goto "#{url}#{page.downcase.gsub(" ","_")}.html"
14
+ browser.goto "#{url}#{page.downcase.gsub(" ", "_")}.html"
15
15
  else
16
16
  error(:env => config)
17
17
  end
@@ -19,10 +19,10 @@ end
19
19
 
20
20
  Given(/I click (the|a) (first|last|random|[0-9]+[a-z]+) (.*)$/) do |arg1, index, type|
21
21
  # Convert the type text to a symbol
22
- type = type.downcase.gsub(" ","_")
22
+ type = type.downcase.gsub(" ", "_")
23
23
 
24
24
  pick = 0
25
- if ["first","last","random"].include?(index)
25
+ if ["first", "last", "random"].include?(index)
26
26
  pick = index.to_sym
27
27
  else
28
28
  pick = index.to_i - 1
@@ -66,6 +66,28 @@ When(/^I find "(.*?)" and name it "(.*?)"$/) do |id, name|
66
66
  scenario.storage.set(name, element)
67
67
  end
68
68
 
69
+ When(/^I wait for (class )?"(.*?)" and name it "(.*?)"$/) do |type, id, name|
70
+ type = 'id' if type.nil? || type.empty?
71
+ type.strip!
72
+ element = browser.wait(:element => {type.to_sym => id})
73
+ scenario.storage.set(name, element)
74
+ end
75
+
76
+ When(/^no error should be thrown when waiting for "(.*?)"$/) do |id|
77
+ begin
78
+ elm = browser.wait(
79
+ :element => {:id => id},
80
+ :timeout => 3,
81
+ :throw => false
82
+ )
83
+ rescue
84
+ raise 'An error was thrown using a wait funtion with :throw => false'
85
+ end
86
+ if not elm.nil?
87
+ raise 'No element was suppose to be found, but it did have a value after the wait action.'
88
+ end
89
+ end
90
+
69
91
  xpath_fragment = nil
70
92
  Given(/^I specify a needle "(.+?)" and a node "(.+?)" (and an empty separator )?to xp_contains$/) do |needle, node, empty_sep|
71
93
  if empty_sep.nil?
@@ -8,163 +8,168 @@ require 'test/unit/assertions'
8
8
  include Test::Unit::Assertions
9
9
 
10
10
  Then(/(first|last|random|[0-9]+[a-z]+) (.*) should (not )?be the (first|last|[0-9]+[a-z]+) element on the page$/) do |index, type, differ, location_on_page|
11
- # Convert the type text to a symbol
12
- type = type.downcase.gsub(" ","_")
13
-
14
- pick = 0
15
- if ["first","last","random"].include?(index)
16
- pick = index.to_sym
17
- else
18
- pick = index.to_i - 1
19
- end
20
- # Options for find
21
- options = {}
22
- # Select the correct element
23
- options[type.to_sym] = {}
24
- # Pick the correct one
25
- options[:pick] = pick
26
- # Execute the find
27
- type_element = browser.find(options)
28
-
29
- # All elements on the page
30
- body_elements = browser.body.elements
31
- # Find the element we need
32
- page_element = nil
33
- if location_on_page == "first"
34
- page_element = body_elements.first
35
- elsif location_on_page == "last"
36
- page_element = body_elements.last
37
- else
38
- page_element = body_elements[location_on_page.to_i - 1]
39
- end
40
-
41
- # No page element
42
- if not page_element
43
- error("Could not find an element on the page")
44
- # Elements are the same but it should not be
45
- elsif page_element == type_element and differ
46
- error("Elements on the page are the same")
47
- # Elements are different but should be the same
48
- elsif page_element != type_element and not differ
49
- error("Elements should be the same")
50
- end
11
+ # Convert the type text to a symbol
12
+ type = type.downcase.gsub(" ", "_")
13
+
14
+ pick = 0
15
+ if ["first", "last", "random"].include?(index)
16
+ pick = index.to_sym
17
+ else
18
+ pick = index.to_i - 1
19
+ end
20
+ # Options for find
21
+ options = {}
22
+ # Select the correct element
23
+ options[type.to_sym] = {}
24
+ # Pick the correct one
25
+ options[:pick] = pick
26
+ # Execute the find
27
+ type_element = browser.find(options)
28
+
29
+ # All elements on the page
30
+ body_elements = browser.body.elements
31
+ # Find the element we need
32
+ page_element = nil
33
+ if location_on_page == "first"
34
+ page_element = body_elements.first
35
+ elsif location_on_page == "last"
36
+ page_element = body_elements.last
37
+ else
38
+ page_element = body_elements[location_on_page.to_i - 1]
39
+ end
40
+
41
+ # No page element
42
+ if not page_element
43
+ error("Could not find an element on the page")
44
+ # Elements are the same but it should not be
45
+ elsif page_element == type_element and differ
46
+ error("Elements on the page are the same")
47
+ # Elements are different but should be the same
48
+ elsif page_element != type_element and not differ
49
+ error("Elements should be the same")
50
+ end
51
51
  end
52
52
 
53
53
  Then(/(first|last|random|[0-9]+[a-z]+) (.*) should (not )?be present$/) do |index, type, hidden|
54
54
  # Convert the type text to a symbol
55
- type = type.downcase.gsub(" ","_")
55
+ type = type.downcase.gsub(" ", "_")
56
56
 
57
- pick = 0
58
- if ["first","last","random"].include?(index)
59
- pick = index.to_sym
60
- else
61
- pick = index.to_i - 1
62
- end
57
+ pick = 0
58
+ if ["first", "last", "random"].include?(index)
59
+ pick = index.to_sym
60
+ else
61
+ pick = index.to_i - 1
62
+ end
63
63
 
64
- # Options for find_all
64
+ # Options for find_all
65
65
  options = {}
66
- # Select the correct element
67
- options[type.to_sym] = {}
68
- # Pick the correct one
69
- options[:pick] = pick
70
- # Execute the find
71
- type_element = browser.find(options)
72
- # Find all
73
- all_elements = browser.find_all(options)
66
+ # Select the correct element
67
+ options[type.to_sym] = {}
68
+ # Pick the correct one
69
+ options[:pick] = pick
70
+ # Execute the find
71
+ type_element = browser.find(options)
72
+ # Find all
73
+ all_elements = browser.find_all(options)
74
74
 
75
75
  options[:filter_by] = :present?
76
- all_present = browser.find_all(options)
77
-
78
- if hidden and type_element.present?
79
- error("Hidden element is visible")
80
- elsif not hidden and not type_element.present?
81
- error("Element is hidden")
82
- elsif hidden and not type_element.present? and
83
- (not all_elements.include?(type_element) or all_present.include?(type_element))
84
- error("Hidden element (not) found via find_all(:filter_by => :present?)")
85
- elsif not hidden and type_element.present? and
86
- (not all_elements.include?(type_element) or not all_present.include?(type_element))
87
- error("Visible element (not) found via find_all(:filter_by => :present?)")
88
- end
76
+ all_present = browser.find_all(options)
77
+
78
+ if hidden and type_element.present?
79
+ error("Hidden element is visible")
80
+ elsif not hidden and not type_element.present?
81
+ error("Element is hidden")
82
+ elsif hidden and not type_element.present? and
83
+ (not all_elements.include?(type_element) or all_present.include?(type_element))
84
+ error("Hidden element (not) found via find_all(:filter_by => :present?)")
85
+ elsif not hidden and type_element.present? and
86
+ (not all_elements.include?(type_element) or not all_present.include?(type_element))
87
+ error("Visible element (not) found via find_all(:filter_by => :present?)")
88
+ end
89
89
  end
90
90
 
91
91
  Then(/^within (\d+) seconds I should see "([^"]+?)"( disappear)?$/) do |timeout, text, condition|
92
92
  if condition
93
- condition = :while
94
- else
95
- condition = :until
96
- end
97
-
98
- browser.wait(
99
- :timeout => timeout,
100
- :text => text,
101
- :condition => condition,
102
- :groups => ["wait"]
103
- )
93
+ condition = :while
94
+ else
95
+ condition = :until
96
+ end
97
+
98
+ browser.wait(
99
+ :timeout => timeout,
100
+ :text => text,
101
+ :condition => condition,
102
+ :groups => ["wait"]
103
+ )
104
104
  end
105
105
 
106
106
  Then(/^within (\d+) seconds I should see "([^"]+?)" and "([^"]+?)"( disappear)?$/) do |timeout, first, second, condition|
107
- if condition
108
- condition = :while
109
- else
110
- condition = :until
111
- end
112
-
113
- browser.multi_wait_all(
114
- :timeout => timeout,
115
- :condition => condition,
116
- :mode => :match_all,
117
- :groups => ["wait"],
118
- :selectors => [
119
- { :tag_name => 'span', :class => /foo/ },
120
- { :tag_name => 'div', :id => 'bar' }
121
- ]
122
- )
107
+ if condition
108
+ condition = :while
109
+ else
110
+ condition = :until
111
+ end
112
+
113
+ browser.multi_wait_all(
114
+ :timeout => timeout,
115
+ :condition => condition,
116
+ :mode => :match_all,
117
+ :groups => ["wait"],
118
+ :selectors => [
119
+ {:tag_name => 'span', :class => /foo/},
120
+ {:tag_name => 'div', :id => 'bar'}
121
+ ]
122
+ )
123
123
  end
124
124
 
125
125
  Then(/^within (\d+) seconds I should see added elements with matching$/) do |timeout|
126
- elems = browser.multi_wait_all(
127
- :timeout => timeout,
128
- :condition => :until,
129
- :mode => :match_all,
130
- :groups => ["wait"],
131
- :selectors => [
132
- { :tag_name => 'span', :class => /foo/, :text => /foo/ },
133
- { :tag_name => 'div', :id => 'bar', :html => "bar" }
134
- ]
135
- )
136
- assert (2 == elems.length), "Expected two elements, found #{elems.length}"
126
+ elems = browser.multi_wait_all(
127
+ :timeout => timeout,
128
+ :condition => :until,
129
+ :mode => :match_all,
130
+ :groups => ["wait"],
131
+ :selectors => [
132
+ {:tag_name => 'span', :class => /foo/, :text => /foo/},
133
+ {:tag_name => 'div', :id => 'bar', :html => "bar"}
134
+ ]
135
+ )
136
+ assert (2 == elems.length), "Expected two elements, found #{elems.length}"
137
137
  end
138
138
 
139
139
  Then(/^within 10 seconds I should see either added element/) do
140
- browser.multi_wait_all(
141
- { :tag_name => 'a', :class => /foo/ },
142
- { :tag_name => 'div', :id => 'bar' }
143
- )
140
+ browser.multi_wait_all(
141
+ {:tag_name => 'a', :class => /foo/},
142
+ {:tag_name => 'div', :id => 'bar'}
143
+ )
144
144
  end
145
145
 
146
146
  Then(/^within (\d+) seconds I get an error waiting for "(.*?)"( to disappear)?$/) do |timeout, text, condition|
147
- if condition
148
- condition = :while
149
- else
150
- condition = :until
151
- end
152
-
153
- begin
154
- browser.wait(
155
- :timeout => timeout,
156
- :text => text,
157
- :condition => condition,
158
- :screenshot => true,
159
- :groups => ["wait"]
160
- )
161
- error(
162
- :message => "Didn't receive an error with this timeout",
163
- :screenshot => true,
164
- :groups => ["wait"]
165
- )
166
- rescue Watir::Wait::TimeoutError => err
167
- end
147
+ if condition
148
+ condition = :while
149
+ else
150
+ condition = :until
151
+ end
152
+
153
+ error_thrown = false
154
+ begin
155
+ browser.wait(
156
+ :timeout => timeout,
157
+ :text => text,
158
+ :condition => condition,
159
+ :screenshot => true,
160
+ :groups => ["wait"]
161
+ )
162
+ rescue RuntimeError => err
163
+ error_thrown = true
164
+ end
165
+ unless error_thrown
166
+ # Only show an error if there was no error thrown before.
167
+ error(
168
+ :message => "Didn't receive an error with this timeout",
169
+ :screenshot => true,
170
+ :groups => ["wait"]
171
+ )
172
+ end
168
173
  end
169
174
 
170
175
 
@@ -182,118 +187,141 @@ end
182
187
 
183
188
 
184
189
  Then(/^a screenshot should have been created$/) do
185
- # Check if there is a screenshot with the correct name
186
- name = browser.screenshot_name
187
- if Dir[name].empty?
188
- error(
189
- :message => "Didn't find a screenshot for this scenario: #{name}",
190
- :groups => ["screenshot"]
191
- )
192
- end
190
+ # Check if there is a screenshot with the correct name
191
+ name = browser.screenshot_name
192
+ if Dir[name].empty?
193
+ error(
194
+ :message => "Didn't find a screenshot for this scenario: #{name}",
195
+ :groups => ["screenshot"]
196
+ )
197
+ end
193
198
  end
194
199
 
195
200
  Then(/^I expect javascript errors$/) do
196
- errors = browser.get_js_errors
197
- if !errors.nil? and errors.length > 0
198
- scenario.check_browser_errors = false
199
- else
200
- error(
201
- :message => "No Javascript errors detected",
202
- :groups => ["error"]
203
- )
204
- end
201
+ errors = browser.get_js_errors
202
+ if !errors.nil? and errors.length > 0
203
+ scenario.check_browser_errors = false
204
+ else
205
+ error(
206
+ :message => "No Javascript errors detected",
207
+ :groups => ["error"]
208
+ )
209
+ end
205
210
  end
206
211
 
207
212
  Then(/^I expect a (\d+) status code$/) do |expected|
208
- expected = expected.to_i
209
- if browser.get_http_status == expected && expected > 299
210
- scenario.check_browser_errors = false
211
- elsif browser.get_http_status != expected
212
- error(
213
- :message => "Incorrect status code: #{browser.get_http_status}",
214
- :groups => ["error"]
215
- )
216
- end
213
+ expected = expected.to_i
214
+ if browser.get_http_status == expected && expected > 299
215
+ scenario.check_browser_errors = false
216
+ elsif browser.get_http_status != expected
217
+ error(
218
+ :message => "Incorrect status code: #{browser.get_http_status}",
219
+ :groups => ["error"]
220
+ )
221
+ end
217
222
  end
218
223
 
219
224
  Then(/^I expect (no|\d+) HTML errors?$/) do |expected|
220
- expected = expected.to_i
221
- scenario.check_browser_errors = false
222
- if browser.get_html_errors.length != expected
223
- error(
224
- :message => "Expected #{expected} errors: #{browser.get_html_errors}",
225
- :groups => ["error"]
226
- )
227
- end
225
+ expected = expected.to_i
226
+ scenario.check_browser_errors = false
227
+ if browser.get_html_errors.length != expected
228
+ error(
229
+ :message => "Expected #{expected} errors: #{browser.get_html_errors}",
230
+ :groups => ["error"]
231
+ )
232
+ end
228
233
  end
229
234
 
230
235
  Then(/^the firefox browser named "(.*?)" has a profile$/) do |name|
231
- if scenario.storage.has? name
232
- browser = scenario.storage.get name
233
- if browser.browser_name == "remote"
234
- if browser.driver.capabilities.firefox_profile.nil?
235
- raise "Remote Firefox Profile is not set"
236
- end
237
- else
238
- if browser.optional_data.has_key? "profile" or browser.optional_data.has_key? :profile
239
- raise "No profile found in the optional data"
240
- end
241
- end
242
- else
243
- error("No item in the storage named #{name}")
244
- end
236
+ if scenario.storage.has? name
237
+ browser = scenario.storage.get name
238
+ if browser.browser_name == "remote"
239
+ if browser.driver.capabilities.firefox_profile.nil?
240
+ raise "Remote Firefox Profile is not set"
241
+ end
242
+ else
243
+ if browser.optional_data.has_key? "profile" or browser.optional_data.has_key? :profile
244
+ raise "No profile found in the optional data"
245
+ end
246
+ end
247
+ else
248
+ error("No item in the storage named #{name}")
249
+ end
245
250
  end
246
251
 
247
252
  Then(/^I expect the "(.*?)" to exist$/) do |name|
248
- browser.find(name)
253
+ browser.find(name)
249
254
  end
250
255
 
251
256
  Then(/^I expect an? (.*?) element to exist$/) do |element|
252
- browser.find(element.to_sym)
257
+ browser.find(element.to_sym)
253
258
  end
254
259
 
255
260
  Then(/^I expect to find an? (.*?) element with (.*?) "(.*?)" using (.*?) settings$/) do |element, attribute, text, setting_choice|
256
- settings = {
257
- "method" => {element.downcase => { attribute.to_sym => /#{text}/}},
258
- "like with hash" => {:like =>{
259
- :element => element.downcase,
260
- :attribute => attribute,
261
- :include => text
262
- }},
263
- "like with array" => {:like => [element.downcase, attribute, text]},
264
- "tag name" => {:tag_name => element.downcase, attribute.to_sym => /#{text}/}
265
- }
266
- setting = settings[setting_choice]
267
- # Find always throws an error if not found
268
- elem_find = browser.find(setting)
269
- elem_findall = browser.find_all(setting).first
270
- if elem_find != elem_findall
271
- error "Incorrect results"
272
- end
261
+ settings = {
262
+ "method" => {element.downcase => {attribute.to_sym => /#{text}/}},
263
+ "like with hash" => {:like => {
264
+ :element => element.downcase,
265
+ :attribute => attribute,
266
+ :include => text
267
+ }},
268
+ "like with array" => {:like => [element.downcase, attribute, text]},
269
+ "tag name" => {:tag_name => element.downcase, attribute.to_sym => /#{text}/}
270
+ }
271
+ setting = settings[setting_choice]
272
+ # Find always throws an error if not found
273
+ elem_find = browser.find(setting)
274
+ elem_findall = browser.find_all(setting).first
275
+ if elem_find != elem_findall
276
+ error "Incorrect results"
277
+ end
273
278
  end
274
279
 
275
280
  Then(/^I expect to find an? (.*?) element or an? (.*?) element$/) do |element1, element2|
276
- element = browser.multi_find(element1.to_sym, element2.to_sym)
281
+ element = browser.multi_find(element1.to_sym, element2.to_sym)
277
282
  end
278
283
 
279
284
  Then(/^I should (not )?find "(.*?)" ([0-9]+ times )?using "(.*?)" as context$/) do |result, id, number, name|
280
- context = scenario.storage.get name
281
- if context.nil?
282
- error(:not_found => "Find context in storage")
283
- end
284
- begin
285
- settings = {:element => id, :context => context}
286
- settings[:filter_by] = :present?
287
- settings[:throw] = false
288
- elements = browser.find_all(settings)
289
- if not number.nil? and elements.length != number.to_i
290
- error("Incorrect number of elements: #{elements.length}")
291
- end
292
- rescue
293
- if result.nil?
294
- raise $!
295
- end
296
- end
285
+ context = scenario.storage.get name
286
+ if context.nil?
287
+ error(:not_found => "Find context in storage")
288
+ end
289
+ begin
290
+ settings = {:element => id, :context => context}
291
+ settings[:filter_by] = :present?
292
+ settings[:throw] = false
293
+ elements = browser.find_all(settings)
294
+ if not number.nil? and elements.length != number.to_i
295
+ error("Incorrect number of elements: #{elements.length}")
296
+ end
297
+ rescue
298
+ if result.nil?
299
+ raise $!
300
+ end
301
+ end
302
+ end
303
+
304
+ Then(/^I should (not )?wait for "(.*?)" ([0-9]+ times )?using "(.*?)" as context$/) do |result, id, number, name|
305
+ context = scenario.storage.get name
306
+ if context.nil?
307
+ error(:not_found => "Find context in storage")
308
+ end
309
+ begin
310
+ settings = {:element => id, :context => context}
311
+ settings[:filter_by] = :present?
312
+ settings[:throw] = false
313
+ settings[:timeout] = 10
314
+ elements = browser.wait_all(settings)
315
+ if not number.nil? and elements.length != number.to_i
316
+ error("Incorrect number of elements: #{elements.length}")
317
+ elsif elements.length > 0
318
+ scenario.storage.set('last_element', elements[0])
319
+ end
320
+ rescue
321
+ if result.nil?
322
+ raise $!
323
+ end
324
+ end
297
325
  end
298
326
 
299
327
  Given(/^I generate and store an email$/) do
@@ -321,12 +349,12 @@ end
321
349
  Then(/^I expect the (world|browser) module's functions to be available$/) do |type|
322
350
  # We're essentially testing that NoMethodError is not being raised here.
323
351
  case type
324
- when "browser"
325
- browser.test_func
326
- when "world"
327
- test_func
328
- else
329
- raise "No such module type: #{type}"
352
+ when "browser"
353
+ browser.test_func
354
+ when "world"
355
+ test_func
356
+ else
357
+ raise "No such module type: #{type}"
330
358
  end
331
359
  end
332
360
 
@@ -354,14 +382,21 @@ Then(/^I expect to use tagname to hash options to (.*?) find element (.*?)$/) do
354
382
  end
355
383
  end
356
384
 
357
- Then(/^the environment variable "(.*?)" is set to "(.*?)"$/) do |var,val|
358
- value = env(var)
359
- assert_equal val, value, "Incorrect value"
385
+ Then(/^the environment variable "(.*?)" is set to "(.*?)"$/) do |var, val|
386
+ value = env(var)
387
+ assert_equal val, value, "Incorrect value"
360
388
  end
361
389
 
362
390
  Then(/^the environment variable "(.*?)" has "(.*?)" set to "(.*?)"$/) do |var, key, val|
363
- hash = env(var,{})
364
- assert hash.is_a?(Hash), "Config element is not a Hash: #{hash}"
365
- assert hash.has_key?(key), "Config is missing #{key}"
366
- assert_equal hash[key], val, "Config has incorrect value"
391
+ hash = env(var, {})
392
+ assert hash.is_a?(Hash), "Config element is not a Hash: #{hash}"
393
+ assert hash.has_key?(key), "Config is missing #{key}"
394
+ assert_equal hash[key], val, "Config has incorrect value"
367
395
  end
396
+
397
+ Then(/^that element should not container text "(.*?)"$/) do |text|
398
+ element = scenario.storage.get 'last_element'
399
+ if element.text.include? text
400
+ raise 'Element did contain the text it should not contain.'
401
+ end
402
+ end