spreewald 0.1.0 → 0.1.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.
@@ -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: