Skip to content

Commit d7cfe8b

Browse files
authored
Merge pull request #161 from alexanderadam/features/add-evalulate_on_new_document-issue-132
fixes issue #132 add evalulate_on_new_document
2 parents d568dc9 + ae62938 commit d7cfe8b

File tree

4 files changed

+50
-1
lines changed

4 files changed

+50
-1
lines changed

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ browser.mouse
124124
browser.quit
125125
```
126126

127-
128127
## Docker
129128

130129
In docker as root you must pass the no-sandbox browser option:
@@ -775,6 +774,18 @@ browser.add_script_tag(content: "window.__injected = 42")
775774
browser.evaluate("window.__injected") # => 42
776775
```
777776

777+
#### evaluate_on_new_document(javascript)
778+
779+
Evaluate JavaScript to modify things before a page load:
780+
781+
```ruby
782+
javascript = <<~JS
783+
Object.defineProperty(navigator, 'languages', {
784+
get: function() { return ['tlh']; }
785+
});
786+
JS
787+
browser.evaluate_on_new_document javascript
788+
```
778789

779790
## Frames
780791

lib/ferrum/browser.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ def extensions
7777
end
7878
end
7979

80+
def evaluate_on_new_document(javascript)
81+
extensions << javascript
82+
end
83+
8084
def timeout
8185
@timeout || DEFAULT_TIMEOUT
8286
end

spec/browser_spec.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,25 @@ module Ferrum
205205
browser&.quit
206206
end
207207
end
208+
209+
it 'supports user Javascript' do
210+
begin
211+
javascript = <<~JS
212+
Object.defineProperty(navigator, 'languages', {
213+
get: function() { return ['tlh']; }
214+
});
215+
JS
216+
217+
browser = Browser.new.tap { |b| b.evaluate_on_new_document(javascript) }
218+
browser.go_to(base_url('/ferrum/with_user_js'))
219+
220+
browser_language = browser.evaluate('document.getElementById("browser-languages").innerHTML')
221+
222+
expect(browser_language).to eq('tlh')
223+
ensure
224+
browser&.quit
225+
end
226+
end
208227
end
209228

210229
context "javascript errors" do

spec/support/views/with_user_js.erb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
2+
<head>
3+
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
4+
<title>ferrum with_user_js</title>
5+
</head>
6+
<body>
7+
<dl>
8+
<dt>languages</dt>
9+
<dd id="browser-languages"></dd>
10+
</dl>
11+
<script>
12+
document.getElementById('browser-languages').innerHTML = navigator.languages;
13+
</script>
14+
</body>
15+
</html>

0 commit comments

Comments
 (0)