lib/playwright_api/dialog.rb



module Playwright
  # `Dialog` objects are dispatched by page via the [`event: Page.dialog`] event.
  #
  # An example of using `Dialog` class:
  #
  # ```python sync
  # from playwright.sync_api import sync_playwright
  #
  # def handle_dialog(dialog):
  #     print(dialog.message)
  #     dialog.dismiss()
  #
  # def run(playwright):
  #     chromium = playwright.chromium
  #     browser = chromium.launch()
  #     page = browser.new_page()
  #     page.on("dialog", handle_dialog)
  #     page.evaluate("alert('1')")
  #     browser.close()
  #
  # with sync_playwright() as playwright:
  #     run(playwright)
  # ```
  #
  # > NOTE: Dialogs are dismissed automatically, unless there is a [`event: Page.dialog`] listener. When listener is
  # present, it **must** either [`method: Dialog.accept`] or [`method: Dialog.dismiss`] the dialog - otherwise the page will
  # [freeze](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#never_blocking) waiting for the dialog, and
  # actions like click will never finish.
  class Dialog < PlaywrightApi

    # Returns when the dialog has been accepted.
    def accept(promptText: nil)
      wrap_impl(@impl.accept(promptText: unwrap_impl(promptText)))
    end

    # If dialog is prompt, returns default prompt value. Otherwise, returns empty string.
    def default_value
      wrap_impl(@impl.default_value)
    end

    # Returns when the dialog has been dismissed.
    def dismiss
      wrap_impl(@impl.dismiss)
    end

    # A message displayed in the dialog.
    def message
      wrap_impl(@impl.message)
    end

    # Returns dialog's type, can be one of `alert`, `beforeunload`, `confirm` or `prompt`.
    def type
      wrap_impl(@impl.type)
    end

    # @nodoc
    def accept_async(promptText: nil)
      wrap_impl(@impl.accept_async(promptText: unwrap_impl(promptText)))
    end

    # -- inherited from EventEmitter --
    # @nodoc
    def on(event, callback)
      event_emitter_proxy.on(event, callback)
    end

    # -- inherited from EventEmitter --
    # @nodoc
    def off(event, callback)
      event_emitter_proxy.off(event, callback)
    end

    # -- inherited from EventEmitter --
    # @nodoc
    def once(event, callback)
      event_emitter_proxy.once(event, callback)
    end

    private def event_emitter_proxy
      @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
    end
  end
end