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
- #all_visible_regions_for(selector) ⇒ Object
- #blur_from_focused_element ⇒ Object
- #bounds_for_css(*css_selectors) ⇒ Object
- #current_capybara_driver_class ⇒ Object
- #hide_caret ⇒ Object
- #pending_image_to_load ⇒ Object
- #rect_for(css_selector) ⇒ Object
- #region_for(element) ⇒ Object
- #selenium? ⇒ Boolean
- #window_size_is_wrong? ⇒ Boolean
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_element ⇒ Object
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_class ⇒ Object
8 9 10 |
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 8 def Capybara.current_session.driver.class end |
#hide_caret ⇒ Object
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_load ⇒ Object
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
12 13 14 |
# File 'lib/capybara/screenshot/diff/browser_helpers.rb', line 12 def selenium? <= Capybara::Selenium::Driver end |
#window_size_is_wrong? ⇒ 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 |