strongqa/howitzer

View on GitHub
lib/howitzer/meta/iframe.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Howitzer
  module Meta
    # This class represents iframe entity within howitzer meta information interface
    class Iframe
      attr_reader :name, :context

      include Howitzer::Meta::Actions

      # Creates new meta iframe element with meta information and utility actions
      # @param name [String] name of the iframe
      # @param context [Howitzer::Web::Page] page which has this iframe
      def initialize(name, context)
        @name = name
        @context = context
      end

      # Finds all instances of iframe on the page and returns them as array of capybara elements
      # @return [Array]
      def capybara_elements
        context.capybara_context.all("iframe[src='#{site_value}']")
      end

      # Finds iframe on the page and returns as a capybara element
      # @param wait [Integer] wait time for element search
      # @return [Capybara::Node::Element, nil]
      def capybara_element(wait: 0)
        context.capybara_context.find("iframe[src='#{site_value}']", match: :first, wait: wait)
      rescue Capybara::ElementNotFound
        nil
      end

      # Returns url value for iframe
      # @return [String]
      def site_value
        return @site_value if @site_value.present?

        context.send("#{name}_iframe") { |frame| @site_value = frame.class.send(:site_value) }
      end
    end
  end
end