Module: MiniAutobot::Utils::OverlayAndWidgetHelper

Included in:
PageObjects::Base, PageObjects::Overlay::Base, PageObjects::Widgets::Base
Defined in:
lib/mini_autobot/utils/overlay_and_widget_helper.rb

Instance Method Summary collapse

Instance Method Details

#get_overlay!(name) ⇒ Enumerable<MiniAutobot::PageObjects::Overlay::Base>

Create overlay of type ‘name`, where `name` is the overlay class name

Parameters:

  • name (#to_s)

    the name of the overlay, under ‘mini_autobots/page_objects/widgets` to load.

  • items (Enumerable<Selenium::WebDriver::Element>)

    WebDriver elements.

Returns:

Raises:

  • NameError



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/mini_autobot/utils/overlay_and_widget_helper.rb', line 46

def get_overlay!(name)
  # Load the Overlay class
  klass_name = "mini_autobot/page_objects/overlay/#{name}".camelize
  klass = begin
    klass_name.constantize
  rescue => exc
    msg = ""
    msg << "Cannot find overlay '#{name}', "
    msg << "because could not load class '#{klass_name}' "
    msg << "with underlying error:\n  #{exc.class}: #{exc.message}\n"
    msg << exc.backtrace.map { |str| "    #{str}" }.join("\n")
    raise NameError, msg
  end
  page = self.page_object
  instance = klass.new(page)
  # Overlay is triggered to show when there's certain interaction on the page
  # So validate! is necessary for loading some elements on some overlays
  begin
    instance.validate!
  rescue Minitest::Assertion => exc
    raise MiniAutobot::PageObjects::InvalidePageState, "#{klass}: #{exc.message}"
  end
  instance
end

#get_widgets!(name, items) ⇒ Enumerable<MiniAutobot::PageObjects::Widgets::Base>

Create widgets of type ‘name` from `items`, where `name` is the widget class name, and `items` is a single or an array of WebDriver elements.

Parameters:

  • name (#to_s)

    the name of the widget, under ‘mini_autobots/page_objects/widgets` to load.

  • items (Enumerable<Selenium::WebDriver::Element>)

    WebDriver elements.

Returns:

Raises:

  • NameError



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/mini_autobot/utils/overlay_and_widget_helper.rb', line 12

def get_widgets!(name, items)
  items = Array(items)
  return [] if items.empty?

  # Load the widget class
  klass_name = "mini_autobot/page_objects/widgets/#{name}".camelize
  klass = begin
    klass_name.constantize
  rescue => exc
    msg = ""
    msg << "Cannot find widget '#{name}', "
    msg << "because could not load class '#{klass_name}' "
    msg << "with underlying error:\n  #{exc.class}: #{exc.message}\n"
    msg << exc.backtrace.map { |str| "    #{str}" }.join("\n")
    raise NameError, msg
  end

  page = self.page_object

  if items.respond_to?(:map)
    items.map { |item| klass.new(page, item) }
  else
    [klass.new(page, items)]
  end
end

#page_objectObject

Raises:

  • (NotImplementedError)


72
73
74
# File 'lib/mini_autobot/utils/overlay_and_widget_helper.rb', line 72

def page_object
  raise NotImplementedError, "classes including OverlayAndWidgetHelper must override :page_object"
end