spreewald 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -312,15 +312,56 @@ When /^I reload the page$/ do
312
312
  end
313
313
 
314
314
  Then /^"([^\"]+)" should( not)? be visible$/ do |text, negate|
315
- paths = [
316
- "//*[@class='hidden']/*[contains(.,'#{text}')]",
317
- "//*[@class='invisible']/*[contains(.,'#{text}')]",
318
- "//*[@style='display: none;']/*[contains(.,'#{text}')]"
319
- ]
320
- xpath = paths.join '|'
321
- expectation = negate ? :should : :should_not
322
- patiently do
323
- page.send(expectation, have_xpath(xpath))
315
+ case Capybara::current_driver
316
+ when :selenium, :webkit
317
+ visibility_detecting_javascript = %[
318
+ (function() {
319
+
320
+ var containsSelector = ':contains(#{text.to_json})';
321
+ var jqueryLoaded = (typeof jQuery != 'undefined');
322
+
323
+ function findCandidates() {
324
+ if (jqueryLoaded) {
325
+ return $(containsSelector);
326
+ } else {
327
+ return $$(containsSelector);
328
+ }
329
+ }
330
+
331
+ function isExactCandidate(candidate) {
332
+ if (jqueryLoaded) {
333
+ return $(candidate).children().find(containsSelector).length == 0;
334
+ } else {
335
+ return candidate.select(containsSelector).length == 0;
336
+ }
337
+ }
338
+
339
+ function elementVisible(element) {
340
+ if (jqueryLoaded) {
341
+ return $(element).is(':visible');
342
+ } else {
343
+ return element.offsetWidth > 0 && element.offsetHeight > 0;
344
+ }
345
+ }
346
+
347
+ var candidates = findCandidates();
348
+
349
+ for (var i = 0; i < candidates.length; i++) {
350
+ var candidate = candidates[i];
351
+ if (isExactCandidate(candidate) && elementVisible(candidate)) {
352
+ return true;
353
+ }
354
+ }
355
+ return false;
356
+
357
+ })();
358
+ ].gsub(/\n/, ' ')
359
+ matcher = negate ? be_false : be_true
360
+ page.evaluate_script(visibility_detecting_javascript).should matcher
361
+ else
362
+ invisibility_detecting_matcher = have_css('.hidden, .invisible, [style~="display: none"]', :text => text)
363
+ expectation = negate ? :should : :should_not # sic
364
+ page.send(expectation, invisibility_detecting_matcher)
324
365
  end
325
366
  end
326
367
 
@@ -1,3 +1,3 @@
1
1
  module Spreewald
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spreewald
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Kraze
@@ -15,7 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-09-21 00:00:00 Z
18
+ date: 2012-10-26 00:00:00 +02:00
19
+ default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: cucumber-rails
@@ -91,6 +92,7 @@ files:
91
92
  - lib/spreewald_support/tolerance_for_selenium_sync_issues.rb
92
93
  - lib/spreewald_support/version.rb
93
94
  - spreewald.gemspec
95
+ has_rdoc: true
94
96
  homepage: https://github.com/makandra/spreewald
95
97
  licenses: []
96
98
 
@@ -120,10 +122,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
122
  requirements: []
121
123
 
122
124
  rubyforge_project:
123
- rubygems_version: 1.8.24
125
+ rubygems_version: 1.3.9.5
124
126
  signing_key:
125
127
  specification_version: 3
126
128
  summary: Collection of useful cucumber steps.
127
129
  test_files: []
128
130
 
129
- has_rdoc: