Method: Insite::Element#initialize

Defined in:
lib/insite/element/element.rb

#initialize(query_scope, *args) ⇒ Element

Returns a new instance of Element.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/insite/element/element.rb', line 37

def initialize(query_scope, *args)
  query_scope.respond_to?(:target) ? obj = query_scope : obj = query_scope.site
  @query_scope   = obj

  @site     = query_scope.class.ancestors.include?(Insite) ? query_scope : query_scope.site
  @browser  = @site.browser

  if args[0].is_a?(Insite::Element) || args[0].is_a?(Watir::Element)
    @target   = args[0].target
    @selector = @target.selector.dup
    @args     = @selector
  elsif  args[0].is_a?(Insite::ElementCollection) || args[0].is_a?(Watir::ElementCollection)
    @args     = nil
    @selector = @target.instance_variable_get(:@selector).dup
    @args     = @selector
  else
    if [Insite::Element, Insite::HTMLElement].include?(self.class)
      @args = parse_args(args.dup)
    elsif tag = parse_args(args)[:tag_name]
      @args = parse_args(args.dup)
    elsif Insite.class_to_tag(self.class)
      @args = parse_args(args.dup).merge(
        tag_name: Insite.class_to_tag(self.class)
      )
    else
      @args = parse_args(args.dup)
    end

    # Figure out the correct query scope.
    @non_relative = @args.delete(:non_relative) || false
    if @non_relative
      @query_scope = query_scope.site
    else
      query_scope.respond_to?(:target) ? obj = query_scope : obj = query_scope.site
      @query_scope = obj
    end
    @selector = @args

    if watir_class = Insite::CLASS_MAP.key(self.class)
      @target = watir_class.new(@query_scope.target, @args)
    else
      @target = Watir::HTMLElement.new(@query_scope.target, @args)
    end
  end
end