tag:github.com,2008:https://github.com/rubycdp/ferrum/releases Release notes from ferrum 2025-05-11T08:15:03Z tag:github.com,2008:Repository/198371388/v0.17.1 2025-05-11T08:16:39Z 0.17.1 <h3>Fixed</h3> <ul> <li>Can't use single quotes in screenshot :selector [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2362673739" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/465" data-hovercard-type="issue" data-hovercard-url="/rubycdp/ferrum/issues/465/hovercard" href="https://github.com/rubycdp/ferrum/issues/465">#465</a>]</li> <li><code>remote_debug_url</code> for modern Chrome returns chrome-devtools-frontend.appspot.com absolute url</li> </ul> route tag:github.com,2008:Repository/198371388/v0.17 2025-05-10T12:24:08Z 0.17 <h3>Added</h3> <ul> <li><code>Ferrum::Network::Exchange#blob?</code> determines if the exchange is blob [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2781720601" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/516" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/516/hovercard" href="https://github.com/rubycdp/ferrum/pull/516">#516</a>]</li> <li><code>Ferrum::Network::Request#headers</code> are enhanced and supplemented with <code>Network.requestWillBeSentExtraInfo</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2752209815" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/506" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/506/hovercard" href="https://github.com/rubycdp/ferrum/pull/506">#506</a>]</li> <li><code>Ferrum::Page#off</code> to unsubscribe from CDP events [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2203600393" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/455" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/455/hovercard" href="https://github.com/rubycdp/ferrum/pull/455">#455</a>]</li> <li><code>Ferrum::Mouse#scroll_by</code> to be able to scroll by, as alternative to <code>scroll_to</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2775604635" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/514" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/514/hovercard" href="https://github.com/rubycdp/ferrum/pull/514">#514</a>]</li> <li><code>Ferrum::Network::Exchange#unknown</code> determines if the exchange is in an unknown state, meaning that browser might not return info about it [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2044273291" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/426" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/426/hovercard" href="https://github.com/rubycdp/ferrum/pull/426">#426</a>]</li> <li><code>Ferrum::Network::Exchange#loader_id</code> returns loader id [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2044273291" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/426" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/426/hovercard" href="https://github.com/rubycdp/ferrum/pull/426">#426</a>]</li> <li><code>Ferrum::Browser#debug</code> opens headless session in the browser devtools frontend [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2843146313" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/519" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/519/hovercard" href="https://github.com/rubycdp/ferrum/pull/519">#519</a>]</li> <li><code>Ferrum::Frame#parent</code> returns the parent frame if this frame is nested [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2873401969" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/523" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/523/hovercard" href="https://github.com/rubycdp/ferrum/pull/523">#523</a>]</li> <li><code>Ferrum::Frame#frame_element</code> returns the element in which the window is embedded [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2873423030" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/524" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/524/hovercard" href="https://github.com/rubycdp/ferrum/pull/524">#524</a>]</li> <li><code>Ferrum::Page#start_screencast</code> starts sending frames to record screencast [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2539701552" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/494" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/494/hovercard" href="https://github.com/rubycdp/ferrum/pull/494">#494</a>]</li> <li><code>Ferrum::Page#stop_screencast</code> stops sending frames [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2539701552" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/494" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/494/hovercard" href="https://github.com/rubycdp/ferrum/pull/494">#494</a>]</li> <li><code>Ferrum::Browser#new(incognito: false)</code> whether to create an incognito profile for the browser startup window, <code>true</code> by default.</li> </ul> <h3>Changed</h3> <ul> <li><code>Ferrum::Network::Exchange#finished?</code> takes into account that exchange might be in an unknown state after loader changed(next <code>go_to</code> call) and considers<br> such as finished [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2044273291" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/426" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/426/hovercard" href="https://github.com/rubycdp/ferrum/pull/426">#426</a>]</li> <li><code>headless: "new"</code> mode is removed as it's now default in modern Chrome, just use <code>headless: true</code> instead [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2830796017" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/518" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/518/hovercard" href="https://github.com/rubycdp/ferrum/pull/518">#518</a>]</li> </ul> <h3>Fixed</h3> <ul> <li>Correctly set mouse events buttons property [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2768034662" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/509" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/509/hovercard" href="https://github.com/rubycdp/ferrum/pull/509">#509</a>]</li> <li>Prevent 'Hash#[]=': can't add a new key into hash during iteration [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2773138692" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/513" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/513/hovercard" href="https://github.com/rubycdp/ferrum/pull/513">#513</a>]</li> <li><code>Ferrum::Network::Exchange#finished?</code> and <code>Ferrum::Network#wait_for_idle</code> take into account that request can be a blob [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2579052216" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/496" data-hovercard-type="issue" data-hovercard-url="/rubycdp/ferrum/issues/496/hovercard" href="https://github.com/rubycdp/ferrum/issues/496">#496</a>]</li> <li>Safe call <em>body</em> method (DOM) when page is empty and no html [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2863195386" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/522" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/522/hovercard" href="https://github.com/rubycdp/ferrum/pull/522">#522</a>]</li> </ul> route tag:github.com,2008:Repository/198371388/v0.16 2024-12-01T09:51:30Z 0.16 <h3>Added</h3> <ul> <li><code>Ferrum::Network#wait_for_idle!</code> raises an error if timeout reached.</li> <li><code>Ferrum::Browser#close</code> closes browser gracefully issuing a CDP command, doesn't clean up ruby resources.</li> <li><code>Ferrum::Node#remove</code> removes node from DOM tree.</li> <li><code>Ferrum::Node#exists?</code> check whether the node in ruby world still exists in the DOM tree.</li> <li><code>Ferrum::Cookies#store</code> stores all cookies of current page in a file.</li> <li><code>Ferrum::Cookies#load</code> Loads all cookies from the file and sets them for current page.</li> <li><code>Ferrum::Page#screenshot</code> supports webp image format.</li> <li><code>Ferrum::Page#activate</code> activates the target for the given page.</li> </ul> <h3>Changed</h3> <ul> <li><code>Ferrum::Network#wait_for_idle</code> now returns true or false. Doesn't raise an error [BREAKING CHANGE].</li> </ul> <h3>Fixed</h3> <ul> <li><code>:ws_url</code> option is now used without modifications WYSIWYG.</li> <li><code>Network.requestWillBeSent</code> callback didn't handle params in a type-safe way</li> <li><code>Page.frameStoppedLoading</code> callback shouldn't wait for document_node_id response</li> <li><code>JSON::NestingError</code> is raised when browser returns very deeply nested JSON and crashes the thread [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2604679681" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/498" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/498/hovercard" href="https://github.com/rubycdp/ferrum/pull/498">#498</a>]</li> </ul> route tag:github.com,2008:Repository/198371388/v0.15 2024-02-17T11:13:21Z 0.15 <h3>Added</h3> <ul> <li><code>Ferrum::Page#disable_javascript</code> disables the JavaScript from the HTML source [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1910220970" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/407" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/407/hovercard" href="https://github.com/rubycdp/ferrum/pull/407">#407</a>]</li> <li><code>Ferrum::Page#set_viewport</code> emulates the viewport [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1910220148" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/406" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/406/hovercard" href="https://github.com/rubycdp/ferrum/pull/406">#406</a>]</li> <li><code>Ferrum::Downloads</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1983615686" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/416" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/416/hovercard" href="https://github.com/rubycdp/ferrum/pull/416">#416</a>] <ul> <li><code>#files</code> information about downloaded files</li> <li><code>#wait</code> wait for file download to be completed</li> <li><code>#set_behavior</code> where and whether to store file</li> </ul> </li> <li><code>Browser::Client#command</code> accepts :async parameter [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2067401910" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/433" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/433/hovercard" href="https://github.com/rubycdp/ferrum/pull/433">#433</a>]</li> <li><code>Ferrum::Browser</code> introduce <code>:flatten</code> mode with one connection and sessions [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2068532845" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/434" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/434/hovercard" href="https://github.com/rubycdp/ferrum/pull/434">#434</a>]</li> <li>Support for ping requests [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1997995108" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/417" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/417/hovercard" href="https://github.com/rubycdp/ferrum/pull/417">#417</a>]</li> <li><code>Ferrum::Browser</code> introduce <code>:ws_url</code> option to set external websocket for a browser [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2069058931" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/435" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/435/hovercard" href="https://github.com/rubycdp/ferrum/pull/435">#435</a>]</li> </ul> <h3>Changed</h3> <ul> <li><code>Ferrum::Page#screeshot</code> accepts :area option [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1917975320" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/410" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/410/hovercard" href="https://github.com/rubycdp/ferrum/pull/410">#410</a>]</li> <li>Resizing page on creation is gone and moved to Cuprite [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2051958123" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/427" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/427/hovercard" href="https://github.com/rubycdp/ferrum/pull/427">#427</a>]</li> <li>Min Ruby version is 2.7</li> <li>Refactored internal API of <code>Ferrum::Browser</code>, <code>Ferrum::Page</code>, <code>Ferrum::Context</code>, <code>Ferrum::Contexts</code>, <code>Ferrum::Target</code><br> instead of passing browser and making cyclic dependency on the browser instance, we pass now a thin client [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2063354795" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/431" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/431/hovercard" href="https://github.com/rubycdp/ferrum/pull/431">#431</a>]</li> <li>Bump <code>websocket-driver</code> to <code>~&gt; 0.7</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2065340588" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/432" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/432/hovercard" href="https://github.com/rubycdp/ferrum/pull/432">#432</a>]</li> <li>Got rid of <code>Concurrent::Async</code> in <code>Ferrum::Browser::Subscriber</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2065340588" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/432" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/432/hovercard" href="https://github.com/rubycdp/ferrum/pull/432">#432</a>]</li> <li><code>Ferrum::Page#set_window_bounds</code> is renamed to <code>Ferrum::Page#window_bounds=</code></li> <li><code>Ferrum::Page</code> get right client from the Target and passes it down everywhere [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2067401910" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/433" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/433/hovercard" href="https://github.com/rubycdp/ferrum/pull/433">#433</a>]</li> <li><code>Ferrum::Network::InterceptedRequest</code> accepts <code>Ferrum::Browser::Client</code> instead of <code>Ferrum::Page</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2067401910" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/433" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/433/hovercard" href="https://github.com/rubycdp/ferrum/pull/433">#433</a>]</li> <li><code>Ferrum::Browser::Client</code> -&gt; <code>Ferrum::Client</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2067401910" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/433" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/433/hovercard" href="https://github.com/rubycdp/ferrum/pull/433">#433</a>]</li> </ul> <h3>Fixed</h3> <ul> <li>Exceptions within <code>.on()</code> were swallowed by a thread pool of <code>Concurrent::Async</code> [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2065340588" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/432" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/432/hovercard" href="https://github.com/rubycdp/ferrum/pull/432">#432</a>]</li> <li><code>Ferrum::Context#add_target</code> puts wrong target to pendings sometimes [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2067401910" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/433" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/433/hovercard" href="https://github.com/rubycdp/ferrum/pull/433">#433</a>]</li> <li>Leaking connection descriptors in tests and after browser quit [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2067401910" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/433" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/433/hovercard" href="https://github.com/rubycdp/ferrum/pull/433">#433</a>]</li> <li>Check if network exchange exists before manipulating it [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2120103895" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/442" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/442/hovercard" href="https://github.com/rubycdp/ferrum/pull/442">#442</a>]</li> </ul> route tag:github.com,2008:Repository/198371388/v0.14 2023-09-15T06:52:36Z 0.14 <h3>Added</h3> <ul> <li><code>Ferrum::Page#device_pixel_ratio</code> returns the ratio of the resolution in physical pixels to the<br> resolution in CSS pixels for the current display device.</li> <li><code>Ferrum::Network#cache(disable: true | false)</code> whether or not to use cache for every request</li> <li><code>Ferrum::Network::Exchange#redirect?</code> determines if the exchange is a redirect</li> <li><code>Ferrum::Network::Exchange#xhr?</code> determines if the exchange is XHR</li> <li><code>Ferrum::Network::Request#xhr?</code> determines if the request is XHR</li> <li><code>Ferrum::Network::Response#loaded?</code> returns true if the response is fully loaded</li> <li><code>Ferrum::Network::Response#redirect?</code> returns true if the response is a redirect</li> <li><code>Ferrum::Node#in_viewport?</code> checks if the element in viewport (optional argument <code>scope</code> as <code>Ferrum::Node</code>)</li> <li><code>Ferrum::Node#scroll_into_view</code> - scrolls to element if needed (when it's not in the viewport)</li> <li><code>Ferrum::Cookies#each</code> - is now Enumerable and supports <code>each</code> method</li> <li><code>Ferrum::Cookies::Cookie</code> <ul> <li><code>#priority</code></li> <li><code>#sameparty?</code></li> <li><code>#source_scheme</code></li> <li><code>#source_port</code></li> <li><code>#to_s</code></li> <li><code>#to_h</code></li> </ul> </li> <li><code>Ferrum::Network::Request#to_h</code></li> <li><code>Ferrum::Network::Response#to_h</code></li> </ul> <h3>Fixed</h3> <ul> <li><code>Ferrum::Network::Exchange#finished?</code> returns <code>true</code> only fully loaded responses</li> <li><code>Ferrum::Page#resize</code> set deviceScaleFactor as <code>0</code> by default [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1551989647" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/330" data-hovercard-type="issue" data-hovercard-url="/rubycdp/ferrum/issues/330/hovercard" href="https://github.com/rubycdp/ferrum/issues/330">#330</a>]</li> <li><code>Ferrum::Network#intercept</code> silently discards unknown resource_types [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1463857337" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/313" data-hovercard-type="issue" data-hovercard-url="/rubycdp/ferrum/issues/313/hovercard" href="https://github.com/rubycdp/ferrum/issues/313">#313</a>]</li> <li>Truncated Chrome WS URL results in Ferrum::DeadBrowserError [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1537160630" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/327" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/327/hovercard" href="https://github.com/rubycdp/ferrum/pull/327">#327</a>]</li> <li>Websocket connection remains indefinitely in :connecting state and causes TimeoutError [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1550218428" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/329" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/329/hovercard" href="https://github.com/rubycdp/ferrum/pull/329">#329</a>]</li> <li><code>Exchange#navigation_request?</code> Handle nil request [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1579882149" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/339" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/339/hovercard" href="https://github.com/rubycdp/ferrum/pull/339">#339</a>]</li> <li>Raise <code>Ferrum::StatusError</code> for any top frame navigation error [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1586584792" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/341" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/341/hovercard" href="https://github.com/rubycdp/ferrum/pull/341">#341</a>]</li> <li><code>Ferrum::Network::Response#loaded?</code> for redirect response [<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1579870573" data-permission-text="Title is private" data-url="https://github.com/rubycdp/ferrum/issues/338" data-hovercard-type="pull_request" data-hovercard-url="/rubycdp/ferrum/pull/338/hovercard" href="https://github.com/rubycdp/ferrum/pull/338">#338</a>]</li> </ul> route tag:github.com,2008:Repository/198371388/v0.13 2022-11-20T11:21:48Z 0.13 <h3>Added</h3> <ul> <li><code>Ferrum::Browser::VersionInfo</code></li> <li><code>Ferrum::Browser</code> <ul> <li><code>#version</code> requests the browser's version information.</li> <li><code>#create_page(proxy: { host: "x.x.x.x", port: "8800", user: "user", password: "pa$$" })</code><br> proxy option, supports creating a page in a new context that uses proxy settings.</li> </ul> </li> <li><code>Ferrum::Page#timeout = n</code> page supports its own timeout</li> <li><code>Ferrum::Frame#execution_id</code> returns execution context id and doesn't raise error</li> <li><code>Ferrum::Frame#execution_id!</code> returns execution context id and raises error when times out on borrowing</li> </ul> <h3>Changed</h3> <h3>Fixed</h3> <ul> <li><code>Ferrum::Keyboard</code> <ul> <li><code>#up, #down</code> accept only one key.</li> </ul> </li> <li><code>Ferrum::Page#goto</code> fixed undefined method url for nil:NilClass when page times out and there are pending requests.</li> <li><code>Runtime.consoleAPICalled</code> didn't show log messages</li> <li><code>Ferrum::Page#subscribe_frame_detached</code> added to clean up old frames</li> <li><code>Ferrum::Proxy</code> was hanging at the exit due to issue in Webrick</li> <li><code>Ferrum::NoExecutionContextError</code> is raised sometimes when we block on <code>Ferrum::Page#frame_by</code></li> </ul> <h3>Removed</h3> <ul> <li><code>Ferrum::Browser#proxy_server</code></li> <li><code>Ferrum::Browser.new(proxy: { server: true })</code> :server option.</li> </ul> route tag:github.com,2008:Repository/198371388/v0.12 2022-09-13T08:03:46Z 0.12 <h3>Added</h3> <ul> <li>Alias <code>Ferrum::Frame#content=</code> to <code>Ferrum::Frame#set_content</code></li> <li>Alias <code>Ferrum::Node#propery</code> to <code>Ferrum::Node#[]</code></li> <li>Implement <code>Ferrum::Network#blacklist=</code> and <code>Ferrum::Network#whitelist=</code></li> <li>Alias <code>Ferrum::Network#blocklist=</code> to <code>Ferrum::Network#blacklist=</code></li> <li>Alias <code>Ferrum::Network#allowlist=</code> to <code>Ferrum::Network#whitelist=</code></li> <li>Alias <code>Ferrum::Page#go</code> to <code>Ferrum::Page#go_to</code></li> <li><code>Ferrum::Browser#create_page</code> accepts now <code>new_context: true</code> which can create a page in incognito context, and yields<br> a block with this page, after which the page is closed.</li> <li><code>Ferrum::Browser</code> supports new option <code>:proxy</code> <a href="https://github.com/rubycdp/ferrum#proxy">https://github.com/rubycdp/ferrum#proxy</a></li> <li><code>Ferrum::Network::Response#params</code> attr_reader added</li> <li><code>Ferrum::Node</code> <ul> <li><code>#selected</code> checks selected options. Returns an array of <code>Ferrum::Node</code> that's selected.</li> <li><code>#select</code> selects options by passed attribute, default: <code>:value</code>.</li> <li><code>#computed_style</code> returns hash of computed styles</li> </ul> </li> <li><code>Ferrum::JavaScriptError#stack_trace</code> attr_reader</li> <li>Windows support</li> <li>Show warning and accept dialog if no handler given</li> <li><code>Ferrum::Cookies#set</code> ability to set cookie using <code>Ferrum::Cookies::Cookie</code> object</li> <li><code>Ferrum::Network#emulate_network_conditions</code> activates emulation of network conditions</li> <li><code>Ferrum::Network#offline_mode</code> puts browser into offline mode</li> <li><code>Ferrum::Page#tracing</code> - instance of <code>Ferrum::Page::Tracing</code> for trace capabilities.</li> <li><code>Ferrum::Page::Tracing#record(&amp;block)</code> start/stop tracing for steps provided in passed block</li> </ul> <h3>Changed</h3> <ul> <li>Use <code>Concurrent::MVar</code> as <code>execution_id</code> in <code>Ferrum::Frame</code></li> <li>Min Ruby version is 2.6 and 3.0 is supported</li> <li><code>Ferrum::Page#bypass_csp</code> accepts hash as argument <code>enabled: true</code> by default</li> <li><code>Ferrum::Context#has_target?</code> -&gt; <code>Ferrum::Context#target?</code></li> <li>We now start looking for Chrome first instead of Chromium, the order for checking binaries has changed</li> <li>Multiple methods are moved into <code>Utils</code>: <ul> <li><code>Ferrum.with_attempts</code> -&gt; <code>Ferrum::Utils::Attempt.with_retry</code></li> <li><code>Ferrum.started</code> -&gt; <code>Ferrum::Utils::ElapsedTime.start</code></li> <li><code>Ferrum.elapsed_time</code> -&gt; <code>Ferrum::Utils::ElapsedTime.elapsed_time</code></li> <li><code>Ferrum.monotonic_time</code> -&gt; <code>Ferrum::Utils::ElapsedTime.monotonic_time</code></li> <li><code>Ferrum.timeout?</code> -&gt; <code>Ferrum::Utils::ElapsedTime.timeout?</code></li> <li><code>Ferrum.windows?</code> -&gt; <code>Ferrum::Utils::Platform.windows?</code></li> <li><code>Ferrum.mac?</code> -&gt; <code>Ferrum::Utils::Platform.mac?</code></li> <li><code>Ferrum.mri?</code> -&gt; <code>Ferrum::Utils::Platform.mri?</code></li> </ul> </li> </ul> <h3>Fixed</h3> <ul> <li><code>Ferrum::Node#selected</code>, <code>Ferrum::Node#select</code> to work in frame scope</li> </ul> route tag:github.com,2008:Repository/198371388/v0.11 2021-03-11T14:44:56Z v0.11 <p>Version 0.11</p> route tag:github.com,2008:Repository/198371388/v0.10.2 2021-02-24T13:27:31Z v0.10.2 <p>Version 0.10.2</p> route tag:github.com,2008:Repository/198371388/v0.10.1 2021-02-24T07:01:01Z v0.10.1 <p>Version 0.10.1</p> route