Module: Capybara::Screenshot::BrowserHelpers

Included in:
Diff::TestMethods
Defined in:
lib/capybara/screenshot/diff/browser_helpers.rb

Constant Summary collapse

IMAGE_WAIT_SCRIPT =
<<~JS
  function pending_image() {
    var images = document.images;
    for (var i = 0; i < images.length; i++) {
      if (!images[i].complete) {
          return images[i].src;
      }
    }
    return false;
  }()
JS
HIDE_CARET_SCRIPT =
<<~JS
  if (!document.getElementById('csdHideCaretStyle')) {
    let style = document.createElement('style');
    style.setAttribute('id', 'csdHideCaretStyle');
    document.head.appendChild(style);
    let styleSheet = style.sheet;
    styleSheet.insertRule("* { caret-color: transparent !important; }", 0);
  }
JS
FIND_ACTIVE_ELEMENT_SCRIPT =
<<~JS
  function activeElement(){
    const ae = document.activeElement; 
    if (ae.nodeName === "INPUT" || ae.nodeName === "TEXTAREA") { 
      ae.blur();      
      return ae;
    }
    return null;
  }();
JS
GET_BOUNDING_CLIENT_RECT_SCRIPT =
<<~JS
  [
    this.getBoundingClientRect().left,
    this.getBoundingClientRect().top,
    this.getBoundingClientRect().right,
    this.getBoundingClientRect().bottom
  ]
JS

Instance Method Summary collapse

Instance Method Details

#all_visible_regions_for(selector) ⇒ Object



86
87
88
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 86

def all_visible_regions_for(selector)
  all(selector, visible: true).map(&method(:region_for))
end

#blur_from_focused_elementObject



73
74
75
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 73

def blur_from_focused_element
  page.evaluate_script(FIND_ACTIVE_ELEMENT_SCRIPT)
end

#bounds_for_css(*css_selectors) ⇒ Object



26
27
28
29
30
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 26

def bounds_for_css(*css_selectors)
  css_selectors.reduce([]) do |regions, selector|
    regions.concat(all_visible_regions_for(selector))
  end
end

#current_capybara_driver_classObject



8
9
10
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 8

def current_capybara_driver_class
  Capybara.current_session.driver.class
end

#hide_caretObject



58
59
60
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 58

def hide_caret
  execute_script(HIDE_CARET_SCRIPT)
end

#pending_image_to_loadObject



44
45
46
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 44

def pending_image_to_load
  evaluate_script IMAGE_WAIT_SCRIPT
end

#rect_for(css_selector) ⇒ Object



22
23
24
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 22

def rect_for(css_selector)
  all_visible_regions_for(css_selector).first
end

#region_for(element) ⇒ Object



90
91
92
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 90

def region_for(element)
  element.evaluate_script(GET_BOUNDING_CLIENT_RECT_SCRIPT).map { |point| point.negative? ? 0 : point.to_i }
end

#selenium?Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 12

def selenium?
  current_capybara_driver_class <= Capybara::Selenium::Driver
end

#window_size_is_wrong?Boolean

Returns:

  • (Boolean)


16
17
18
19
20
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 16

def window_size_is_wrong?
  selenium? &&
    Screenshot.window_size &&
    page.driver.browser.manage.window.size != ::Selenium::WebDriver::Dimension.new(*Screenshot.window_size)
end