lib/testcentricity/app_elements/alert.rb in testcentricity-3.0.2 vs lib/testcentricity/app_elements/alert.rb in testcentricity-3.0.3
- old
+ new
@@ -3,25 +3,89 @@
def initialize(name, parent, locator, context)
super
@type = :alert
end
+ # 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.
+ #
+ # @return [Integer]
+ # @param seconds [Integer or Float] wait time in seconds
+ # @example
+ # permissions_modal.await(2)
+ #
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
+ # Performs the action required accept the currently visible alert modal. If the alert modal is still visible after
+ # 5 seconds, an exception is raised.
+ #
+ # @example
+ # alert_modal.accept
+ #
def accept
alert_accept
wait_until_gone(5)
end
+ # Performs the action required dismiss the currently visible alert modal. If the alert modal is still visible after
+ # 5 seconds, an exception is raised.
+ #
+ # @example
+ # alert_modal.dismiss
+ #
def dismiss
alert_dismiss
wait_until_gone(5)
+ end
+
+ #
+ # @return [Integer]
+ # @param action [Symbol] action to perform if alert modal is visible. Acceptable values are :allow, :accept, :dont_allow, or :dismiss
+ # @param timeout [Integer or Float] wait time in seconds. Defaults to 2 if not specified
+ # @param button_name [String] optional caption of button to tap associated with the specified action
+ # @example
+ # alert_modal.await_and_respond(:dismiss)
+ # OR
+ # permissions_modal.await_and_respond(:accept, timeout = 1, button_name = 'Allow Once')
+ #
+ 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
end
end