class DomGlancy::PageMapper

Public Instance Methods

run(test_root) click to toggle source
# File lib/dom_glancy/page_mapper.rb, line 4
def run(test_root)
  filename = ::DomGlancy::FileNameBuilder.new(test_root).current

  result = [true, '']
  begin
    data = map_page.to_yaml
    File.open(filename, 'w') { |file| file.write(data) }
  rescue Exception => e
    result = [false, "map current file error: #{e.message}"]
  end

  result
end

Private Instance Methods

map_page() click to toggle source
# File lib/dom_glancy/page_mapper.rb, line 20
def map_page
  page_map_js = mapping_javascript
  resize_browser_for_scrollbar do
    Capybara.current_session.driver.browser.execute_script(page_map_js)
  end
end
mapping_javascript() click to toggle source
# File lib/dom_glancy/page_mapper.rb, line 27
    def mapping_javascript
      <<-JS
        var dom_glancy = {

          treeUp: function() {
            var treeWalker = document.createTreeWalker(
              document.body,
              NodeFilter.SHOW_ELEMENT,
              { acceptNode: function(node) { return NodeFilter.FILTER_ACCEPT; } },
              false
            );

            var nodeList = [];

            while(treeWalker.nextNode()){
              var cn = treeWalker.currentNode;
              var node_details = {
                "height"  : cn.clientHeight,
                "width"   : cn.clientWidth,
                "id"      : cn.id,
                "tag"     : cn.tagName,
                "class"   : cn.className,
                "top"     : cn.offsetTop,
                "left"    : cn.offsetLeft,
                "visible" : dom_glancy.isVisible(cn)
              }
              nodeList.push(node_details);
            }

            return(nodeList);
          },

          isVisible: function(elem) {
              return elem.offsetWidth > 0 || elem.offsetHeight > 0;
          }
        };
        return dom_glancy.treeUp();
      JS
    end
resize_browser_for_scrollbar() { || ... } click to toggle source
# File lib/dom_glancy/page_mapper.rb, line 67
def resize_browser_for_scrollbar
  original_dimensions = Capybara.current_session.driver.browser.manage.window.size
  width = Capybara.current_session.evaluate_script('window.innerWidth - document.documentElement.clientWidth').to_i

  Capybara.current_session.driver.browser.manage.window.resize_to(original_dimensions.width + width, original_dimensions.height) if width > 0

  result = yield

  Capybara.current_session.driver.browser.manage.window.resize_to(original_dimensions.width, original_dimensions.height) if width > 0

  result
end