Class: AppPrism::Elements::Element

Inherits:
Object
  • Object
show all
Includes:
NestedElements
Defined in:
lib/app_prism/elements/element.rb

Direct Known Subclasses

Sections::ScreenSection

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from NestedElements

#nested_elements

Constructor Details

#initialize(identifiers, driver) ⇒ Element



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/app_prism/elements/element.rb', line 7

def initialize(identifiers, driver)
  if identifiers.is_a?(Selenium::WebDriver::Element)
    @element = identifiers
  else
    if identifiers.keys.include?(:android) || identifiers.keys.include?(:ios)
      @locator = identifiers[:android] if android?
      @locator = identifiers[:ios] if ios?
    else
      @locator = identifiers
    end
  end
  @platform = driver
end

Instance Attribute Details

#locatorObject (readonly)

Returns the value of attribute locator.



5
6
7
# File 'lib/app_prism/elements/element.rb', line 5

def locator
  @locator
end

#platformObject (readonly)

Returns the value of attribute platform.



5
6
7
# File 'lib/app_prism/elements/element.rb', line 5

def platform
  @platform
end

Instance Method Details

#clearObject



108
109
110
# File 'lib/app_prism/elements/element.rb', line 108

def clear
  element.send_keys ''
end

#clickObject



116
117
118
# File 'lib/app_prism/elements/element.rb', line 116

def click
  element.click
end

#default_wait_timeObject



90
91
92
# File 'lib/app_prism/elements/element.rb', line 90

def default_wait_time
  AppPrism::DEFAULT_WAIT_TIME || 30
end

#elementObject



21
22
23
24
25
# File 'lib/app_prism/elements/element.rb', line 21

def element
  @element || @platform.find_element(@locator)
rescue RuntimeError
  nil
end

#nested_element(identifiers) ⇒ Object

def swipe_up

@platform.swipe_up(@locator)

end



71
72
73
74
75
# File 'lib/app_prism/elements/element.rb', line 71

def nested_element(identifiers)
  nested_elt = element.find_element(identifiers[:android]) if android?
  nested_elt = element.find_element(identifiers[:ios]) if ios?
  self.class.new(nested_elt, @platform)
end

#parentObject

def value

get_parameter 'value'

end



133
134
135
136
137
138
139
140
141
142
# File 'lib/app_prism/elements/element.rb', line 133

def parent
  loc = if @locator.has_key? :xpath
          @locator[:xpath] + '/..'
        elsif @locator.has_key? :id
          "//*[@id=\"#{@locator[:id]}\"]/.."
        else
          raise 'Something wrong happened'
        end
  @platform.find_element(loc)
end

#send_keys(text) ⇒ Object



104
105
106
# File 'lib/app_prism/elements/element.rb', line 104

def send_keys(text)
  element.send_keys text
end

#sizeObject

def scroll_into_view

raise 'Does not work yet'

end



157
158
159
160
161
162
163
# File 'lib/app_prism/elements/element.rb', line 157

def size
  element.size
  # rect = get_element['rect']
  # height = rect['height']
  # width = rect['width']
  # {height: height, width: width}
end

#textObject

def long_press

when_visible
@platform.long_touch(@locator)

end



125
126
127
# File 'lib/app_prism/elements/element.rb', line 125

def text
  element.text
end

#touchObject



112
113
114
# File 'lib/app_prism/elements/element.rb', line 112

def touch
  when_visible.click
end

#visible?Boolean



144
145
146
147
# File 'lib/app_prism/elements/element.rb', line 144

def visible?
  element.nil? ? false : element.displayed?
  # element ? element.displayed? : false
end

#wait_for(wait_time: default_wait_time) ⇒ Object

Raises:

  • (Timeout::Error)


94
95
96
97
98
99
100
101
102
# File 'lib/app_prism/elements/element.rb', line 94

def wait_for(wait_time: default_wait_time)
  start_time = Time.now
  loop do
    return true if yield
    break unless (Time.now - start_time) < wait_time
    sleep 0.5
  end
  raise Timeout::Error, "Timed out while waiting for locator:\"#{@locator}\""
end

#when_not_visible(wait_time = default_wait_time) ⇒ Object



84
85
86
87
88
# File 'lib/app_prism/elements/element.rb', line 84

def when_not_visible(wait_time = default_wait_time)
  wait_for(wait_time: wait_time) { !visible? }
rescue Selenium::WebDriver::Error::NoSuchElementError,Timeout::Error,RuntimeError
  return
end

#when_visible(wait_time = default_wait_time) ⇒ Object



77
78
79
80
81
82
# File 'lib/app_prism/elements/element.rb', line 77

def when_visible(wait_time = default_wait_time)
  wait_for(wait_time: wait_time) { visible? }
  self
rescue Timeout::Error
  false
end