playwright-ruby-client 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/README.md +33 -0
  3. data/documentation/babel.config.js +3 -0
  4. data/documentation/docs/api/accessibility.md +7 -0
  5. data/documentation/docs/api/browser.md +185 -0
  6. data/documentation/docs/api/browser_context.md +398 -0
  7. data/documentation/docs/api/browser_type.md +105 -0
  8. data/documentation/docs/api/cdp_session.md +7 -0
  9. data/documentation/docs/api/console_message.md +41 -0
  10. data/documentation/docs/api/dialog.md +74 -0
  11. data/documentation/docs/api/element_handle.md +640 -0
  12. data/documentation/docs/api/experimental/_category_.yml +3 -0
  13. data/documentation/docs/api/experimental/android.md +25 -0
  14. data/documentation/docs/api/experimental/android_device.md +91 -0
  15. data/documentation/docs/api/experimental/android_input.md +38 -0
  16. data/documentation/docs/api/experimental/android_socket.md +7 -0
  17. data/documentation/docs/api/experimental/android_web_view.md +7 -0
  18. data/documentation/docs/api/file_chooser.md +51 -0
  19. data/documentation/docs/api/frame.md +867 -0
  20. data/documentation/docs/api/js_handle.md +116 -0
  21. data/documentation/docs/api/keyboard.md +157 -0
  22. data/documentation/docs/api/mouse.md +69 -0
  23. data/documentation/docs/api/page.md +1469 -0
  24. data/documentation/docs/api/playwright.md +63 -0
  25. data/documentation/docs/api/request.md +188 -0
  26. data/documentation/docs/api/response.md +97 -0
  27. data/documentation/docs/api/route.md +80 -0
  28. data/documentation/docs/api/selectors.md +23 -0
  29. data/documentation/docs/api/touchscreen.md +8 -0
  30. data/documentation/docs/api/tracing.md +54 -0
  31. data/documentation/docs/api/web_socket.md +7 -0
  32. data/documentation/docs/api/worker.md +7 -0
  33. data/documentation/docs/article/api_coverage.mdx +11 -0
  34. data/documentation/docs/article/getting_started.md +152 -0
  35. data/documentation/docs/article/guides/_category_.yml +3 -0
  36. data/documentation/docs/article/guides/download_playwright_driver.md +49 -0
  37. data/documentation/docs/article/guides/launch_browser.md +119 -0
  38. data/documentation/docs/article/guides/rails_integration.md +51 -0
  39. data/{docs → documentation/docs/include}/api_coverage.md +0 -0
  40. data/documentation/docusaurus.config.js +107 -0
  41. data/documentation/package.json +39 -0
  42. data/documentation/sidebars.js +15 -0
  43. data/documentation/src/components/HomepageFeatures.js +61 -0
  44. data/documentation/src/components/HomepageFeatures.module.css +13 -0
  45. data/documentation/src/css/custom.css +44 -0
  46. data/documentation/src/pages/index.js +50 -0
  47. data/documentation/src/pages/index.module.css +41 -0
  48. data/documentation/src/pages/markdown-page.md +7 -0
  49. data/documentation/static/.nojekyll +0 -0
  50. data/documentation/static/img/playwright-logo.svg +9 -0
  51. data/documentation/static/img/undraw_dropdown_menu.svg +1 -0
  52. data/documentation/static/img/undraw_web_development.svg +1 -0
  53. data/documentation/static/img/undraw_windows.svg +1 -0
  54. data/documentation/yarn.lock +8805 -0
  55. data/lib/playwright/channel_owners/binding_call.rb +33 -0
  56. data/lib/playwright/channel_owners/browser_context.rb +2 -2
  57. data/lib/playwright/channel_owners/element_handle.rb +2 -10
  58. data/lib/playwright/channel_owners/frame.rb +6 -28
  59. data/lib/playwright/channel_owners/js_handle.rb +2 -10
  60. data/lib/playwright/channel_owners/page.rb +10 -1
  61. data/lib/playwright/input_files.rb +0 -8
  62. data/lib/playwright/javascript.rb +0 -10
  63. data/lib/playwright/javascript/expression.rb +2 -7
  64. data/lib/playwright/version.rb +1 -1
  65. data/lib/playwright_api/accessibility.rb +7 -89
  66. data/lib/playwright_api/android.rb +7 -64
  67. data/lib/playwright_api/android_device.rb +8 -8
  68. data/lib/playwright_api/browser.rb +15 -169
  69. data/lib/playwright_api/browser_context.rb +47 -609
  70. data/lib/playwright_api/browser_type.rb +13 -103
  71. data/lib/playwright_api/cdp_session.rb +2 -25
  72. data/lib/playwright_api/console_message.rb +6 -6
  73. data/lib/playwright_api/dialog.rb +11 -92
  74. data/lib/playwright_api/element_handle.rb +60 -362
  75. data/lib/playwright_api/file_chooser.rb +0 -28
  76. data/lib/playwright_api/frame.rb +74 -713
  77. data/lib/playwright_api/js_handle.rb +16 -90
  78. data/lib/playwright_api/keyboard.rb +21 -213
  79. data/lib/playwright_api/mouse.rb +1 -45
  80. data/lib/playwright_api/page.rb +155 -1635
  81. data/lib/playwright_api/playwright.rb +14 -117
  82. data/lib/playwright_api/request.rb +15 -121
  83. data/lib/playwright_api/response.rb +9 -9
  84. data/lib/playwright_api/route.rb +8 -105
  85. data/lib/playwright_api/selectors.rb +6 -97
  86. data/lib/playwright_api/tracing.rb +1 -61
  87. data/lib/playwright_api/web_socket.rb +1 -1
  88. data/lib/playwright_api/worker.rb +6 -42
  89. metadata +55 -4
  90. data/lib/playwright/javascript/function.rb +0 -67
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a283a84899327e4b56db01800535c7231c1c2e94e7cbf11bd72ec60b1415c92c
4
- data.tar.gz: 5e929e57b0b8d3b0970c2a0cb5029acd6cc5bd23e419bf06bc1b0a45e2f5e781
3
+ metadata.gz: b365f47558ade3fcf3d803a070cbd61eb4eae6279f0d93c1641a53d9b50ec232
4
+ data.tar.gz: 353de7a190205c6d3d4542b3058afe24c0c634fe70811c15384b55d1cb464571
5
5
  SHA512:
6
- metadata.gz: d13545073c8a110c55098547c7f7c5c4adae5c542b6b18f78be4cf3e5187cf2c92d8ccc86484c0e7bdfbeaf619ff6c8f77ce2f9c82b5eccad4c72dffb22603a5
7
- data.tar.gz: ea4a751f747e5738121c8603eb3e495dd2ef32082d1fbd92841c2a0182637300b7c3bde0a00acbf1b25bdc572b140ff4e8a5a694dda95152f568ea5aa2760fef
6
+ metadata.gz: ec905a5051716af754993c11b5a484e5bf69a9b50cdb6681f583869d0cf70d23eb3265507d6739b6d006fc8419360dea8570f6fae6fc3ac8fdd6d44ae3547fd8
7
+ data.tar.gz: cf06e3351a40457108080dea85af6c8e417ffda3bec6671f9280ad42bc5fde7e58cf039016fe11387a7cb3e1347e1391f1440d23c2e54e512ca70e39ba90db38
@@ -0,0 +1,33 @@
1
+ # Website
2
+
3
+ This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
4
+
5
+ ## Installation
6
+
7
+ ```console
8
+ yarn install
9
+ ```
10
+
11
+ ## Local Development
12
+
13
+ ```console
14
+ yarn start
15
+ ```
16
+
17
+ This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
18
+
19
+ ## Build
20
+
21
+ ```console
22
+ yarn build
23
+ ```
24
+
25
+ This command generates static content into the `build` directory and can be served using any static contents hosting service.
26
+
27
+ ## Deployment
28
+
29
+ ```console
30
+ GIT_USER=<Your GitHub username> USE_SSH=true yarn deploy
31
+ ```
32
+
33
+ If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
3
+ };
@@ -0,0 +1,7 @@
1
+ ---
2
+ sidebar_position: 10
3
+ ---
4
+
5
+ # Accessibility
6
+
7
+ Not Implemented
@@ -0,0 +1,185 @@
1
+ ---
2
+ sidebar_position: 10
3
+ ---
4
+
5
+ # Browser
6
+
7
+ - extends: [EventEmitter]
8
+
9
+ A Browser is created via [BrowserType#launch](./browser_type#launch). An example of using a [Browser](./browser) to create a [Page](./page):
10
+
11
+ ```ruby
12
+ firefox = playwright.firefox
13
+ browser = firefox.launch
14
+ begin
15
+ page = browser.new_page
16
+ page.goto("https://example.com")
17
+ ensure
18
+ browser.close
19
+ end
20
+ ```
21
+
22
+
23
+
24
+ ## close
25
+
26
+ ```
27
+ def close
28
+ ```
29
+
30
+ In case this browser is obtained using [BrowserType#launch](./browser_type#launch), closes the browser and all of its pages (if any
31
+ were opened).
32
+
33
+ In case this browser is connected to, clears all created contexts belonging to this browser and disconnects from the
34
+ browser server.
35
+
36
+ The [Browser](./browser) object itself is considered to be disposed and cannot be used anymore.
37
+
38
+ ## contexts
39
+
40
+ ```
41
+ def contexts
42
+ ```
43
+
44
+ Returns an array of all open browser contexts. In a newly created browser, this will return zero browser contexts.
45
+
46
+ ```ruby
47
+ playwright.webkit.launch do |browser|
48
+ puts browser.contexts.count # => 0
49
+ context = browser.new_context
50
+ puts browser.contexts.count # => 1
51
+ end
52
+ ```
53
+
54
+
55
+
56
+ ## connected?
57
+
58
+ ```
59
+ def connected?
60
+ ```
61
+
62
+ Indicates that the browser is connected.
63
+
64
+ ## new_context
65
+
66
+ ```
67
+ def new_context(
68
+ acceptDownloads: nil,
69
+ bypassCSP: nil,
70
+ colorScheme: nil,
71
+ deviceScaleFactor: nil,
72
+ extraHTTPHeaders: nil,
73
+ geolocation: nil,
74
+ hasTouch: nil,
75
+ httpCredentials: nil,
76
+ ignoreHTTPSErrors: nil,
77
+ isMobile: nil,
78
+ javaScriptEnabled: nil,
79
+ locale: nil,
80
+ noViewport: nil,
81
+ offline: nil,
82
+ permissions: nil,
83
+ proxy: nil,
84
+ record_har_omit_content: nil,
85
+ record_har_path: nil,
86
+ record_video_dir: nil,
87
+ record_video_size: nil,
88
+ screen: nil,
89
+ storageState: nil,
90
+ timezoneId: nil,
91
+ userAgent: nil,
92
+ viewport: nil,
93
+ &block)
94
+ ```
95
+
96
+ Creates a new browser context. It won't share cookies/cache with other browser contexts.
97
+
98
+ ```ruby
99
+ playwright.firefox.launch do |browser| # or "chromium.launch" or "webkit.launch".
100
+ # create a new incognito browser context.
101
+ context = browser.new_context
102
+
103
+ # create a new page in a pristine context.
104
+ page = context.new_page()
105
+ page.goto("https://example.com")
106
+ end
107
+ ```
108
+
109
+
110
+
111
+ ## new_page
112
+
113
+ ```
114
+ def new_page(
115
+ acceptDownloads: nil,
116
+ bypassCSP: nil,
117
+ colorScheme: nil,
118
+ deviceScaleFactor: nil,
119
+ extraHTTPHeaders: nil,
120
+ geolocation: nil,
121
+ hasTouch: nil,
122
+ httpCredentials: nil,
123
+ ignoreHTTPSErrors: nil,
124
+ isMobile: nil,
125
+ javaScriptEnabled: nil,
126
+ locale: nil,
127
+ noViewport: nil,
128
+ offline: nil,
129
+ permissions: nil,
130
+ proxy: nil,
131
+ record_har_omit_content: nil,
132
+ record_har_path: nil,
133
+ record_video_dir: nil,
134
+ record_video_size: nil,
135
+ screen: nil,
136
+ storageState: nil,
137
+ timezoneId: nil,
138
+ userAgent: nil,
139
+ viewport: nil)
140
+ ```
141
+
142
+ Creates a new page in a new browser context. Closing this page will close the context as well.
143
+
144
+ This is a convenience API that should only be used for the single-page scenarios and short snippets. Production code and
145
+ testing frameworks should explicitly create [Browser#new_context](./browser#new_context) followed by the
146
+ [BrowserContext#new_page](./browser_context#new_page) to control their exact life times.
147
+
148
+ ## start_tracing
149
+
150
+ ```
151
+ def start_tracing(page: nil, categories: nil, path: nil, screenshots: nil)
152
+ ```
153
+
154
+ > NOTE: Tracing is only supported on Chromium-based browsers.
155
+
156
+ You can use [Browser#start_tracing](./browser#start_tracing) and [Browser#stop_tracing](./browser#stop_tracing) to create a trace file that can be
157
+ opened in Chrome DevTools performance panel.
158
+
159
+ ```ruby
160
+ browser.start_tracing(page: page, path: "trace.json")
161
+ begin
162
+ page.goto("https://www.google.com")
163
+ ensure
164
+ browser.stop_tracing
165
+ end
166
+ ```
167
+
168
+
169
+ ## stop_tracing
170
+
171
+ ```
172
+ def stop_tracing
173
+ ```
174
+
175
+ > NOTE: Tracing is only supported on Chromium-based browsers.
176
+
177
+ Returns the buffer with trace data.
178
+
179
+ ## version
180
+
181
+ ```
182
+ def version
183
+ ```
184
+
185
+ Returns the browser version.
@@ -0,0 +1,398 @@
1
+ ---
2
+ sidebar_position: 10
3
+ ---
4
+
5
+ # BrowserContext
6
+
7
+ - extends: [EventEmitter]
8
+
9
+ BrowserContexts provide a way to operate multiple independent browser sessions.
10
+
11
+ If a page opens another page, e.g. with a `window.open` call, the popup will belong to the parent page's browser
12
+ context.
13
+
14
+ Playwright allows creation of "incognito" browser contexts with [Browser#new_context](./browser#new_context) method. "Incognito" browser
15
+ contexts don't write any browsing data to disk.
16
+
17
+ ```ruby
18
+ # create a new incognito browser context
19
+ context = browser.new_context
20
+
21
+ # create a new page inside context.
22
+ page = context.new_page
23
+ page.goto("https://example.com")
24
+
25
+ # dispose context once it is no longer needed.
26
+ context.close()
27
+ ```
28
+
29
+
30
+
31
+ ## add_cookies
32
+
33
+ ```
34
+ def add_cookies(cookies)
35
+ ```
36
+
37
+ Adds cookies into this browser context. All pages within this context will have these cookies installed. Cookies can be
38
+ obtained via [BrowserContext#cookies](./browser_context#cookies).
39
+
40
+ ```ruby
41
+ browser_context.add_cookies([cookie_object1, cookie_object2])
42
+ ```
43
+
44
+
45
+
46
+ ## add_init_script
47
+
48
+ ```
49
+ def add_init_script(path: nil, script: nil)
50
+ ```
51
+
52
+ Adds a script which would be evaluated in one of the following scenarios:
53
+ - Whenever a page is created in the browser context or is navigated.
54
+ - Whenever a child frame is attached or navigated in any page in the browser context. In this case, the script is
55
+ evaluated in the context of the newly attached frame.
56
+
57
+ The script is evaluated after the document was created but before any of its scripts were run. This is useful to amend
58
+ the JavaScript environment, e.g. to seed `Math.random`.
59
+
60
+ An example of overriding `Math.random` before the page loads:
61
+
62
+ ```ruby
63
+ # in your playwright script, assuming the preload.js file is in same directory.
64
+ browser_context.add_init_script(path: "preload.js")
65
+ ```
66
+
67
+ > NOTE: The order of evaluation of multiple scripts installed via [BrowserContext#add_init_script](./browser_context#add_init_script) and
68
+ [Page#add_init_script](./page#add_init_script) is not defined.
69
+
70
+ ## browser
71
+
72
+ ```
73
+ def browser
74
+ ```
75
+
76
+ Returns the browser instance of the context. If it was launched as a persistent context null gets returned.
77
+
78
+ ## clear_cookies
79
+
80
+ ```
81
+ def clear_cookies
82
+ ```
83
+
84
+ Clears context cookies.
85
+
86
+ ## clear_permissions
87
+
88
+ ```
89
+ def clear_permissions
90
+ ```
91
+
92
+ Clears all permission overrides for the browser context.
93
+
94
+ ```ruby
95
+ context = browser.new_context
96
+ context.grant_permissions(["clipboard-read"])
97
+
98
+ # do stuff ..
99
+
100
+ context.clear_permissions
101
+ ```
102
+
103
+
104
+
105
+ ## close
106
+
107
+ ```
108
+ def close
109
+ ```
110
+
111
+ Closes the browser context. All the pages that belong to the browser context will be closed.
112
+
113
+ > NOTE: The default browser context cannot be closed.
114
+
115
+ ## cookies
116
+
117
+ ```
118
+ def cookies(urls: nil)
119
+ ```
120
+
121
+ If no URLs are specified, this method returns all cookies. If URLs are specified, only cookies that affect those URLs
122
+ are returned.
123
+
124
+ ## expose_binding
125
+
126
+ ```
127
+ def expose_binding(name, callback, handle: nil)
128
+ ```
129
+
130
+ The method adds a function called `name` on the `window` object of every frame in every page in the context. When
131
+ called, the function executes `callback` and returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) which resolves to the return value of `callback`. If
132
+ the `callback` returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), it will be awaited.
133
+
134
+ The first argument of the `callback` function contains information about the caller: `{ browserContext: BrowserContext,
135
+ page: Page, frame: Frame }`.
136
+
137
+ See [Page#expose_binding](./page#expose_binding) for page-only version.
138
+
139
+ An example of exposing page URL to all frames in all pages in the context:
140
+
141
+ ```ruby
142
+ browser_context.expose_binding("pageURL", ->(source) { source[:page].url })
143
+ page = browser_context.new_page
144
+
145
+ page.content = <<~HTML
146
+ <script>
147
+ async function onClick() {
148
+ document.querySelector('div').textContent = await window.pageURL();
149
+ }
150
+ </script>
151
+ <button onclick="onClick()">Click me</button>
152
+ <div></div>
153
+ HTML
154
+
155
+ page.click("button")
156
+ ```
157
+
158
+ An example of passing an element handle:
159
+
160
+ ```ruby
161
+ def print_text(source, element)
162
+ element.text_content
163
+ end
164
+
165
+ browser_context.expose_binding("clicked", method(:print_text), handle: true)
166
+ page = browser_context.new_page
167
+
168
+ page.content = <<~HTML
169
+ <script>
170
+ document.addEventListener('click', async (event) => {
171
+ alert(await window.clicked(event.target));
172
+ })
173
+ </script>
174
+ <div>Click me</div>
175
+ <div>Or click me</div>
176
+ HTML
177
+
178
+ page.click('div')
179
+ ```
180
+
181
+
182
+
183
+ ## expose_function
184
+
185
+ ```
186
+ def expose_function(name, callback)
187
+ ```
188
+
189
+ The method adds a function called `name` on the `window` object of every frame in every page in the context. When
190
+ called, the function executes `callback` and returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) which resolves to the return value of `callback`.
191
+
192
+ If the `callback` returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), it will be awaited.
193
+
194
+ See [Page#expose_function](./page#expose_function) for page-only version.
195
+
196
+ An example of adding an `sha256` function to all pages in the context:
197
+
198
+ ```ruby
199
+ require 'digest'
200
+
201
+ def sha256(text)
202
+ Digest::SHA256.hexdigest(text)
203
+ end
204
+
205
+ browser_context.expose_function("sha256", method(:sha256))
206
+ page = browser_context.new_page()
207
+ page.content = <<~HTML
208
+ <script>
209
+ async function onClick() {
210
+ document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
211
+ }
212
+ </script>
213
+ <button onclick="onClick()">Click me</button>
214
+ <div></div>
215
+ HTML
216
+ page.click("button")
217
+ ```
218
+
219
+
220
+
221
+ ## grant_permissions
222
+
223
+ ```
224
+ def grant_permissions(permissions, origin: nil)
225
+ ```
226
+
227
+ Grants specified permissions to the browser context. Only grants corresponding permissions to the given origin if
228
+ specified.
229
+
230
+ ## new_page
231
+
232
+ ```
233
+ def new_page
234
+ ```
235
+
236
+ Creates a new page in the browser context.
237
+
238
+ ## pages
239
+
240
+ ```
241
+ def pages
242
+ ```
243
+
244
+ Returns all open pages in the context.
245
+
246
+ ## route
247
+
248
+ ```
249
+ def route(url, handler)
250
+ ```
251
+
252
+ Routing provides the capability to modify network requests that are made by any page in the browser context. Once route
253
+ is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
254
+
255
+ An example of a naive handler that aborts all image requests:
256
+
257
+ ```ruby
258
+ context = browser.new_context
259
+ page = context.new_page
260
+ context.route("**/*.{png,jpg,jpeg}", ->(route, request) { route.abort })
261
+ page.goto("https://example.com")
262
+ ```
263
+
264
+ or the same snippet using a regex pattern instead:
265
+
266
+ ```ruby
267
+ context = browser.new_context
268
+ page = context.new_page
269
+ context.route(/\.(png|jpg)$/, ->(route, request) { route.abort })
270
+ page.goto("https://example.com")
271
+ ```
272
+
273
+ It is possible to examine the request to decide the route action. For example, mocking all requests that contain some
274
+ post data, and leaving all other requests as is:
275
+
276
+ ```ruby
277
+ def handle_route(route, request)
278
+ if request.post_data["my-string"]
279
+ mocked_data = request.post_data.merge({ "my-string" => 'mocked-data'})
280
+ route.fulfill(postData: mocked_data)
281
+ else
282
+ route.continue
283
+ end
284
+ end
285
+ context.route("/api/**", method(:handle_route))
286
+ ```
287
+
288
+ Page routes (set up with [Page#route](./page#route)) take precedence over browser context routes when request matches both
289
+ handlers.
290
+
291
+ To remove a route with its handler you can use [BrowserContext#unroute](./browser_context#unroute).
292
+
293
+ > NOTE: Enabling routing disables http cache.
294
+
295
+ ## set_default_navigation_timeout
296
+
297
+ ```
298
+ def set_default_navigation_timeout(timeout)
299
+ ```
300
+ alias: `default_navigation_timeout=`
301
+
302
+ This setting will change the default maximum navigation time for the following methods and related shortcuts:
303
+ - [Page#go_back](./page#go_back)
304
+ - [Page#go_forward](./page#go_forward)
305
+ - [Page#goto](./page#goto)
306
+ - [Page#reload](./page#reload)
307
+ - [Page#set_content](./page#set_content)
308
+ - [Page#expect_navigation](./page#expect_navigation)
309
+
310
+ > NOTE: [Page#set_default_navigation_timeout](./page#set_default_navigation_timeout) and [Page#set_default_timeout](./page#set_default_timeout) take priority over
311
+ [BrowserContext#set_default_navigation_timeout](./browser_context#set_default_navigation_timeout).
312
+
313
+ ## set_default_timeout
314
+
315
+ ```
316
+ def set_default_timeout(timeout)
317
+ ```
318
+ alias: `default_timeout=`
319
+
320
+ This setting will change the default maximum time for all the methods accepting `timeout` option.
321
+
322
+ > NOTE: [Page#set_default_navigation_timeout](./page#set_default_navigation_timeout), [Page#set_default_timeout](./page#set_default_timeout) and
323
+ [BrowserContext#set_default_navigation_timeout](./browser_context#set_default_navigation_timeout) take priority over [BrowserContext#set_default_timeout](./browser_context#set_default_timeout).
324
+
325
+ ## set_extra_http_headers
326
+
327
+ ```
328
+ def set_extra_http_headers(headers)
329
+ ```
330
+ alias: `extra_http_headers=`
331
+
332
+ The extra HTTP headers will be sent with every request initiated by any page in the context. These headers are merged
333
+ with page-specific extra HTTP headers set with [Page#set_extra_http_headers](./page#set_extra_http_headers). If page overrides a particular
334
+ header, page-specific header value will be used instead of the browser context header value.
335
+
336
+ > NOTE: [BrowserContext#set_extra_http_headers](./browser_context#set_extra_http_headers) does not guarantee the order of headers in the outgoing requests.
337
+
338
+ ## set_geolocation
339
+
340
+ ```
341
+ def set_geolocation(geolocation)
342
+ ```
343
+ alias: `geolocation=`
344
+
345
+ Sets the context's geolocation. Passing `null` or `undefined` emulates position unavailable.
346
+
347
+ ```ruby
348
+ browser_context.geolocation = { latitude: 59.95, longitude: 30.31667 }
349
+ ```
350
+
351
+ > NOTE: Consider using [BrowserContext#grant_permissions](./browser_context#grant_permissions) to grant permissions for the browser context pages to
352
+ read its geolocation.
353
+
354
+ ## set_offline
355
+
356
+ ```
357
+ def set_offline(offline)
358
+ ```
359
+ alias: `offline=`
360
+
361
+
362
+
363
+ ## unroute
364
+
365
+ ```
366
+ def unroute(url, handler: nil)
367
+ ```
368
+
369
+ Removes a route created with [BrowserContext#route](./browser_context#route). When `handler` is not specified, removes all routes for
370
+ the `url`.
371
+
372
+ ## expect_event
373
+
374
+ ```
375
+ def expect_event(event, predicate: nil, timeout: nil, &block)
376
+ ```
377
+
378
+ Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
379
+ value. Will throw an error if the context closes before the event is fired. Returns the event data value.
380
+
381
+ ```ruby
382
+ new_page = browser_context.expect_event('page') do
383
+ page.click('button')
384
+ end
385
+ ```
386
+
387
+
388
+
389
+ ## expect_page
390
+
391
+ ```
392
+ def expect_page(predicate: nil, timeout: nil)
393
+ ```
394
+
395
+ Performs action and waits for a new [Page](./page) to be created in the context. If predicate is provided, it passes [Page](./page) value into the `predicate` and waits for `predicate.call(page)` to return a truthy value. Will throw an error if
396
+ the context closes before new [Page](./page) is created.
397
+
398
+ ## tracing