Class: TestCentricity::AppAlert

Inherits:
AppUIElement show all
Defined in:
lib/testcentricity/app_elements/alert.rb

Instance Attribute Summary

Attributes inherited from AppUIElement

#context, #locator, #name, #parent, #type

Instance Method Summary collapse

Methods inherited from AppUIElement

#clear, #click, #disabled?, #double_tap, #enabled?, #exists?, #get_attribute, #get_caption, #get_locator, #get_name, #get_object_type, #get_value, #height, #hidden?, #scroll, #selected?, #send_keys, #set, #swipe, #tag_name, #tap, #visible?, #wait_until_enabled, #wait_until_exists, #wait_until_gone, #wait_until_hidden, #wait_until_value_changes, #wait_until_value_is, #wait_until_visible, #width, #x_loc, #y_loc

Constructor Details

#initialize(name, parent, locator, context) ⇒ AppAlert

Returns a new instance of AppAlert.



3
4
5
6
# File 'lib/testcentricity/app_elements/alert.rb', line 3

def initialize(name, parent, locator, context)
  super
  @type = :alert
end

Instance Method Details

#acceptObject

Performs the action required accept the currently visible alert modal. If the alert modal is still visible after 5 seconds, an exception is raised.

Examples:

alert_modal.accept


33
34
35
36
# File 'lib/testcentricity/app_elements/alert.rb', line 33

def accept
  alert_accept
  wait_until_gone(5)
end

#await(seconds) ⇒ Integer

Wait until the alert modal is visible, or until the specified wait time has expired. If the wait time is nil, then the wait time will be Environ.default_max_wait_time. Unlike wait_until_visible or wait_until_exists, this method does not raise an exception if the alert modal does not appear within the specified wait time. Returns true if the alert modal is visible.

Examples:

permissions_modal.await(2)

Parameters:

  • seconds (Integer or Float)

    wait time in seconds

Returns:

  • (Integer)


18
19
20
21
22
23
24
25
# File 'lib/testcentricity/app_elements/alert.rb', line 18

def await(seconds)
  timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { exists? }
  true
rescue
  false
end

#await_and_respond(action, timeout = 2, button_name = nil) ⇒ Integer

Examples:

alert_modal.await_and_respond(:dismiss)
     OR
permissions_modal.await_and_respond(:accept, timeout = 1, button_name = 'Allow Once')

Parameters:

  • action (Symbol)

    action to perform if alert modal is visible. Acceptable values are :allow, :accept, :dont_allow, or :dismiss

  • timeout (Integer or Float) (defaults to: 2)

    wait time in seconds. Defaults to 2 if not specified

  • button_name (String) (defaults to: nil)

    optional caption of button to tap associated with the specified action

Returns:

  • (Integer)


59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/testcentricity/app_elements/alert.rb', line 59

def await_and_respond(action, timeout = 2, button_name = nil)
  if await(timeout)
    case action
    when :allow, :accept
      if button_name.nil?
        accept
      elsif Environ.is_ios?
        $driver.execute_script('mobile: alert', { action: 'accept', buttonLabel: button_name })
      else
        $driver.execute_script('mobile: acceptAlert', { buttonLabel: button_name })
      end
    when :dont_allow, :dismiss
      if button_name.nil?
        dismiss
      elsif Environ.is_ios?
        $driver.execute_script('mobile: alert', { action: 'dismiss', buttonLabel: button_name })
      else
        $driver.execute_script('mobile: dismissAlert', { buttonLabel: button_name })
      end
    else
      raise "#{action} is not a valid selector"
    end
    if Environ.is_ios? && await(1)
      buttons = $driver.execute_script('mobile: alert', { action: 'getButtons' })
      raise "Could not perform #{action} action on active modal. Available modal buttons are #{buttons}"
    end
    true
  else
    false
  end
end

#dismissObject

Performs the action required dismiss the currently visible alert modal. If the alert modal is still visible after 5 seconds, an exception is raised.

Examples:

alert_modal.dismiss


44
45
46
47
# File 'lib/testcentricity/app_elements/alert.rb', line 44

def dismiss
  alert_dismiss
  wait_until_gone(5)
end