lib/spreewald/web_steps.rb in spreewald-0.3.1 vs lib/spreewald/web_steps.rb in spreewald-0.3.2
- old
+ new
@@ -371,53 +371,55 @@
#
# More details [here](https://makandracards.com/makandra/1049-capybara-check-that-a-page-element-is-hidden-via-css)
Then /^"([^\"]+)" should( not)? be visible$/ do |text, negate|
case Capybara::current_driver
when :selenium, :webkit
- visibility_detecting_javascript = %[
- (function() {
+ patiently do
+ visibility_detecting_javascript = %[
+ (function() {
- var containsSelector = ':contains(#{text.to_json})';
- var jqueryLoaded = (typeof jQuery != 'undefined');
+ var containsSelector = ':contains(#{text.to_json})';
+ var jqueryLoaded = (typeof jQuery != 'undefined');
- function findCandidates() {
- if (jqueryLoaded) {
- return $(containsSelector);
- } else {
- return $$(containsSelector);
+ function findCandidates() {
+ if (jqueryLoaded) {
+ return $(containsSelector);
+ } else {
+ return $$(containsSelector);
+ }
}
- }
- function isExactCandidate(candidate) {
- if (jqueryLoaded) {
- return $(candidate).find(containsSelector).length == 0;
- } else {
- return candidate.select(containsSelector).length == 0;
+ function isExactCandidate(candidate) {
+ if (jqueryLoaded) {
+ return $(candidate).find(containsSelector).length == 0;
+ } else {
+ return candidate.select(containsSelector).length == 0;
+ }
}
- }
- function elementVisible(element) {
- if (jqueryLoaded) {
- return $(element).is(':visible');
- } else {
- return element.offsetWidth > 0 && element.offsetHeight > 0;
+ function elementVisible(element) {
+ if (jqueryLoaded) {
+ return $(element).is(':visible');
+ } else {
+ return element.offsetWidth > 0 && element.offsetHeight > 0;
+ }
}
- }
- var candidates = findCandidates();
+ var candidates = findCandidates();
- for (var i = 0; i < candidates.length; i++) {
- var candidate = candidates[i];
- if (isExactCandidate(candidate) && elementVisible(candidate)) {
- return true;
+ for (var i = 0; i < candidates.length; i++) {
+ var candidate = candidates[i];
+ if (isExactCandidate(candidate) && elementVisible(candidate)) {
+ return true;
+ }
}
- }
- return false;
+ return false;
- })();
- ].gsub(/\n/, ' ')
- matcher = negate ? be_false : be_true
- page.evaluate_script(visibility_detecting_javascript).should matcher
+ })();
+ ].gsub(/\n/, ' ')
+ matcher = negate ? be_false : be_true
+ page.evaluate_script(visibility_detecting_javascript).should matcher
+ end
else
invisibility_detecting_matcher = have_css('.hidden, .invisible, [style~="display: none"]', :text => text)
expectation = negate ? :should : :should_not # sic
page.send(expectation, invisibility_detecting_matcher)
end