Module: Capybara::Playwright::PageExtension

Defined in:
lib/capybara/playwright/page.rb

Defined Under Namespace

Classes: DialogAcceptor, DialogMessageMatcher, Headers

Instance Method Summary collapse

Instance Method Details

#capybara_accept_modal(dialog_type, **options, &block) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/capybara/playwright/page.rb', line 89

def capybara_accept_modal(dialog_type, **options, &block)
  timeout_sec = options[:wait]
  acceptor = DialogAcceptor.new(dialog_type, options)
  matcher = DialogMessageMatcher.new(options[:text])
  message_promise = Concurrent::Promises.resolvable_future
  handler = -> (dialog) {
    message = dialog.message
    if matcher.matches?(message)
      message_promise.fulfill(message)
      acceptor.handle(dialog)
    else
      message_promise.reject(Capybara::ModalNotFound.new("Dialog message=\"#{message}\" dowsn't match"))
      dialog.dismiss
    end
  }
  capybara_dialog_event_handler.with_handler(handler) do
    block.call

    message = message_promise.value!(timeout_sec)
    if message_promise.fulfilled?
      message
    else
      # timed out
      raise Capybara::ModalNotFound
    end
  end
end

#capybara_current_frameObject



178
179
180
# File 'lib/capybara/playwright/page.rb', line 178

def capybara_current_frame
  @capybara_frames.last || main_frame
end

#capybara_dismiss_modal(dialog_type, **options, &block) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/capybara/playwright/page.rb', line 117

def capybara_dismiss_modal(dialog_type, **options, &block)
  timeout_sec = options[:wait]
  matcher = DialogMessageMatcher.new(options[:text])
  message_promise = Concurrent::Promises.resolvable_future
  handler = -> (dialog) {
    message = dialog.message
    if matcher.matches?(message)
      message_promise.fulfill(message)
    else
      message_promise.reject(Capybara::ModalNotFound.new("Dialog message=\"#{message}\" dowsn't match"))
    end
    dialog.dismiss
  }
  capybara_dialog_event_handler.with_handler(handler) do
    block.call

    message = message_promise.value!(timeout_sec)
    if message_promise.fulfilled?
      message
    else
      # timed out
      raise Capybara::ModalNotFound
    end
  end
end

#capybara_pop_frameObject



174
175
176
# File 'lib/capybara/playwright/page.rb', line 174

def capybara_pop_frame
  @capybara_frames.pop
end

#capybara_push_frame(frame) ⇒ Object

Parameters:

  • frame (Playwright::Frame)


170
171
172
# File 'lib/capybara/playwright/page.rb', line 170

def capybara_push_frame(frame)
  @capybara_frames << frame
end

#capybara_reset_framesObject



165
166
167
# File 'lib/capybara/playwright/page.rb', line 165

def capybara_reset_frames
  @capybara_frames.clear
end

#capybara_response_headersObject



151
152
153
154
155
156
157
158
159
# File 'lib/capybara/playwright/page.rb', line 151

def capybara_response_headers
  headers = @capybara_last_response&.headers || {}

  Headers.new.tap do |h|
    headers.each do |key, value|
      h[key] = value
    end
  end
end

#capybara_status_codeObject



161
162
163
# File 'lib/capybara/playwright/page.rb', line 161

def capybara_status_code
  @capybara_last_response&.status.to_i
end

#initialize(*args, **kwargs) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/capybara/playwright/page.rb', line 6

def initialize(*args, **kwargs)
  if kwargs.empty?
    super(*args)
  else
    super(*args, **kwargs)
  end
  capybara_initialize
end