Ferrum::Network#wait_for_idle!
raises an error if timeout reached.Ferrum::Browser#close
closes browser gracefully issuing a CDP command, doesn't clean up ruby resources.Ferrum::Node#remove
removes node from DOM tree.Ferrum::Node#exists?
check whether the node in ruby world still exists in the DOM tree.Ferrum::Cookies#store
stores all cookies of current page in a file.Ferrum::Cookies#load
Loads all cookies from the file and sets them for current page.
Ferrum::Network#wait_for_idle
now returns true or false. Doesn't raise an error [BREAKING CHANGE].
:ws_url
option is now used without modifications WYSIWYG.Network.requestWillBeSent
callback didn't handle params in a type-safe wayPage.frameStoppedLoading
callback shouldn't wait for document_node_id responseJSON::NestingError
is raised when browser returns very deeply nested JSON and crashes the thread [#498]
Ferrum::Page#disable_javascript
disables the JavaScript from the HTML source [#407]Ferrum::Page#set_viewport
emulates the viewport [#406]Ferrum::Downloads
[#416]#files
information about downloaded files#wait
wait for file download to be completed#set_behavior
where and whether to store file
Browser::Client#command
accepts :async parameter [#433]Ferrum::Browser
introduce:flatten
mode with one connection and sessions [#434]- Support for ping requests [#417]
Ferrum::Browser
introduce:ws_url
option to set external websocket for a browser [#435]
Ferrum::Page#screeshot
accepts :area option [#410]- Resizing page on creation is gone and moved to Cuprite [#427]
- Min Ruby version is 2.7
- Refactored internal API of
Ferrum::Browser
,Ferrum::Page
,Ferrum::Context
,Ferrum::Contexts
,Ferrum::Target
instead of passing browser and making cyclic dependency on the browser instance, we pass now a thin client [#431] - Bump
websocket-driver
to~> 0.7
[#432] - Got rid of
Concurrent::Async
inFerrum::Browser::Subscriber
[#432] Ferrum::Page#set_window_bounds
is renamed toFerrum::Page#window_bounds=
Ferrum::Page
get right client from the Target and passes it down everywhere [#433]Ferrum::Network::InterceptedRequest
acceptsFerrum::Browser::Client
instead ofFerrum::Page
[#433]Ferrum::Browser::Client
->Ferrum::Client
[#433]
- Exceptions within
.on()
were swallowed by a thread pool ofConcurrent::Async
[#432] Ferrum::Context#add_target
puts wrong target to pendings sometimes [#433]- Leaking connection descriptors in tests and after browser quit [#433]
- Check if network exchange exists before manipulating it [#442]
0.14 - (Sep 14, 2023)
Ferrum::Page#device_pixel_ratio
returns the ratio of the resolution in physical pixels to the resolution in CSS pixels for the current display device.Ferrum::Network#cache(disable: true | false)
whether or not to use cache for every requestFerrum::Network::Exchange#redirect?
determines if the exchange is a redirectFerrum::Network::Exchange#xhr?
determines if the exchange is XHRFerrum::Network::Request#xhr?
determines if the request is XHRFerrum::Network::Response#loaded?
returns true if the response is fully loadedFerrum::Network::Response#redirect?
returns true if the response is a redirectFerrum::Node#in_viewport?
checks if the element in viewport (optional argumentscope
asFerrum::Node
)Ferrum::Node#scroll_into_view
- scrolls to element if needed (when it's not in the viewport)Ferrum::Cookies#each
- is now Enumerable and supportseach
methodFerrum::Cookies::Cookie
#priority
#sameparty?
#source_scheme
#source_port
#to_s
#to_h
Ferrum::Network::Request#to_h
Ferrum::Network::Response#to_h
Ferrum::Network::Exchange#finished?
returnstrue
only fully loaded responsesFerrum::Page#resize
set deviceScaleFactor as0
by default [#330]Ferrum::Network#intercept
silently discards unknown resource_types [#313]- Truncated Chrome WS URL results in Ferrum::DeadBrowserError [#327]
- Websocket connection remains indefinitely in :connecting state and causes TimeoutError [#329]
Exchange#navigation_request?
Handle nil request [#339]- Raise
Ferrum::StatusError
for any top frame navigation error [#341] Ferrum::Network::Response#loaded?
for redirect response [#338]
0.13 - (Nov 12, 2022)
Ferrum::Browser::VersionInfo
Ferrum::Browser
#version
requests the browser's version information.#create_page(proxy: { host: "x.x.x.x", port: "8800", user: "user", password: "pa$$" })
proxy option, supports creating a page in a new context that uses proxy settings.
Ferrum::Page#timeout = n
page supports its own timeoutFerrum::Frame#execution_id
returns execution context id and doesn't raises errorFerrum::Frame#execution_id!
returns execution context id and raises error when times out on borrowing
Ferrum::Keyboard
#up, #down
accept only one key.
Ferrum::Page#goto
fixed undefined method url for nil:NilClass when page times out and there are pending requests.Runtime.consoleAPICalled
didn't show log messagesFerrum::Page#subscribe_frame_detached
added to clean up old framesFerrum::Proxy
was hanging at the exit due to issue in WebrickFerrum::NoExecutionContextError
is raised sometimes when we block onFerrum::Page#frame_by
Ferrum::Browser#proxy_server
Ferrum::Browser.new(proxy: { server: true })
:server option.
0.12 - (Sep 13, 2022)
- Alias
Ferrum::Frame#content=
toFerrum::Frame#set_content
- Alias
Ferrum::Node#propery
toFerrum::Node#[]
- Implement
Ferrum::Network#blacklist=
andFerrum::Network#whitelist=
- Alias
Ferrum::Network#blocklist=
toFerrum::Network#blacklist=
- Alias
Ferrum::Network#allowlist=
toFerrum::Network#whitelist=
- Alias
Ferrum::Page#go
toFerrum::Page#go_to
Ferrum::Browser#create_page
accepts nownew_context: true
which can create a page in incognito context, and yields a block with this page, after which the page is closed.Ferrum::Browser
supports new option:proxy
https://github.com/rubycdp/ferrum#proxyFerrum::Network::Response#params
attr_reader addedFerrum::Node
#selected
checks selected options. Returns an array ofFerrum::Node
that's selected.#select
selects options by passed attribute, default::value
.#computed_style
returns hash of computed styles
Ferrum::JavaScriptError#stack_trace
attr_reader- Windows support
- Show warning and accept dialog if no handler given
Ferrum::Cookies#set
ability to set cookie usingFerrum::Cookies::Cookie
objectFerrum::Network#emulate_network_conditions
activates emulation of network conditionsFerrum::Network#offline_mode
puts browser into offline modeFerrum::Page#tracing
- instance ofFerrum::Page::Tracing
for trace capabilities.Ferrum::Page::Tracing#record(&block)
start/stop tracing for steps provided in passed block
- Use
Concurrent::MVar
asexecution_id
inFerrum::Frame
- Min Ruby version is 2.6 and 3.0 is supported
Ferrum::Page#bypass_csp
accepts hash as argumentenabled: true
by defaultFerrum::Context#has_target?
->Ferrum::Context#target?
- We now start looking for Chrome first instead of Chromium, the order for checking binaries has changed
- Multiple methods are moved into
Utils
:Ferrum.with_attempts
->Ferrum::Utils::Attempt.with_retry
Ferrum.started
->Ferrum::Utils::ElapsedTime.start
Ferrum.elapsed_time
->Ferrum::Utils::ElapsedTime.elapsed_time
Ferrum.monotonic_time
->Ferrum::Utils::ElapsedTime.monotonic_time
Ferrum.timeout?
->Ferrum::Utils::ElapsedTime.timeout?
Ferrum.windows?
->Ferrum::Utils::Platform.windows?
Ferrum.mac?
->Ferrum::Utils::Platform.mac?
Ferrum.mri?
->Ferrum::Utils::Platform.mri?
Ferrum::Node#selected
,Ferrum::Node#select
to work in frame scope
0.11 - (Mar 11, 2021)
Ferrum::CoordinatesNotFoundError
Ferrum::Node
#wait_for_stop_moving
wait for any js or css movements to finish#moving?
shows if node is moving#focusable?
if node can have focus
Ferrum::Page
#playback_rate
shows the rate#playback_rate=
control css animation speedposition
get window positionposition=
set window position
Ferrum::Browser#evaluate_on_new_document
evaluate js on every new document--no-startup-window
flag to Chrome by default
Ferrum::NodeIsMovingError
->Ferrum::NodeMovingError
Ferrum::Node::MOVING_WAIT
->Ferrum::Node::MOVING_WAIT_DELAY
Ferrum::Node::MOVING_ATTEMPTS
->Ferrum::Node::MOVING_WAIT_ATTEMPTS
Concurrent::Hash
->Concurrent::Map
in contexts
- Typo
Ferrum::Page::Screenshot::PAPEP_FORMATS
->Ferrum::Page::Screenshot::PAPER_FORMATS
0.10.2 - (Feb 24, 2021)
- Set
Ferrum::Page
@event
when setting up main frame
0.10.1 - (Feb 24, 2021)
- Don't mutate options in
Ferrum::Frame::Runtime#call
0.10 - (Feb 23, 2021)
- Added alias
go_to
forgoto
- Introduce
Ferrum::Browser
option:pending_connection_errors
- You can pass background to screenshot method
browser.screenshot(background_color: Ferrum::RGBA.new(0, 0, 0, 0.0))
Ferrum::StatusError#pendings
attr_reader addedFerrum::ProcessTimeoutError#output
attr_reader addedFerrum::Page#mhtml
Ferrum::Browser::Process::PROCESS_TIMEOUT
is 2 -> 10 by defaultFerrum::Browser::Network#authorize
now accepts blockFerrum::Page#pdf
method now streams file withtransferMode: "ReturnAsStream"
mode good for large files
execution_id
in Runtime is called with retry- Main frame is set correct under some circumstances
Network.loadingFailed
event is added to catch canceled requestsdetectCycle
for cyclic JS objects- Fall back to JS when finding element position with
get_content_quads
- Temporary user-data-dir is removed after
Ferrum::Browser::Process#stop
0.9 - (Jul 24, 2020)
Ferrum::NodeIsMovingError
to raise error when node is moving before clickingFERRUM_NODE_MOVING_WAIT
andFERRUM_NODE_MOVING_ATTEMPTS
envs are added to wait until node stops moving with at leastn
attemptsFerrum::Page#wait_for_reload
waits until page is reloaded:ignore_default_browser_options
option is added toFerrum::Browser
to exclude Ferrum's defaults- XVFB support
Ferrum::Runtime::CyclicObject
is returned when JS object cannot be represented in RubyFERRUM_LOGGING_SCREENSHOTS
env is added to skip showing Base64 screenshots in logger
Ferrum::Network::Request#respond
can accept content longer than 45 charsFerrum::Browser::Subscriber
is thread safe
0.8 - (Apr 7, 2020)
Ferrum::Frame
supports looking up nodes inside frame with methods:#at_css
#css
#at_xpath
#xpath
Ferrum::Page#set_content
can be used to set the content of the page:ws_max_receive_size
option is added toFerrum::Browser
Ferrum::ProcessTimeoutError
error instead ofRuntimeError
Ferrum::Page#stop
to stop loading page
- Fix Ruby 2.7 warnings
Ferrum::Node#click
acceptsoffset: { :x, :y, :position (:top | :center)
and:delay
options- Instantiate empty main frame in advance
Ferrum::Mouse#move
supports steps as option:steps
- Delegate
current_title
to page Ferrum::Browser::Cookies#set
supports:httponly
and:samesite
options
Ferrum::Frame#execution_id
should be set only onceFerrum::Page#doctype
can be nil- Add
:slowmoable
option to all methods with visual representation Ferrum::Page#screenshot
works for html tag set with 100% width and height
.ruby-version
file from repository
0.7 - (Jan 28, 2020)
- Fix issue when connection is refused and shows up as pending
- Can set
Accept-Language
even ifUser-Agent
is not provided
FERRUM_GOTO_WAIT
env is added with default value of 0.1Ferrum::Network::Response#type
shows type of the responseFerrum::Network
#wait_for_idle
wait for network idleidle?
shows if there are no connectionstotal_connections
shows total number of connectionsfinished_connections
shows a number of closed connectionspending_connections
shows a number of opened connections
Ferrum::Network::Exchange
#intercepted_request
attr accessor for intercepted request if any#blank?
shows if request is absent#finished?
returns true if request blocked or response is given#pending?
shows if exchange is still waiting response
Ferrum::Network::InterceptedRequest
#status?
one ofresponded|continued|aborted
- Initial support for Firefox
- Dedicated queue for request interruptions
Ferrum::Browser
- accepts
:extensions
option with:source
key which can have js text to be executed when page is opened #bypass_csp
can now bypass csp headers when injecting scripts
- accepts
Ferrum::StatusError#pendings
now shows all pending connections when time is outFerrum::Browser::Process#path
is delegated toCommand
- Stop listening to
Page.domContentEventFired
,Page.frameScheduledNavigation
andPage.frameClearedScheduledNavigation
events
0.6.2 - (Oct 30, 2019)
Ferrum::Target
:#page=
attribute writer#maybe_sleep_if_new_window
- sleep withFerrum::Target::NEW_WINDOW_WAIT
seconds byFerrum::Target#window?
condition
0.6.1 - (Oct 30, 2019)
Ferrum::Frame#execution_id?
- boolean of equals passed argumentexecution_id
and currentexecution_id
from current class instance
Ferrum::Page::Frames
- fix missing frame:#frame_by
- optional argumentexecution_id
removed with change subscriber to search byFerrum::Frame#execution_id?
0.6.0 - (Oct 29, 2019)
- description of
browser.add_script_tag/browser.add_style_tag
in README Ferrum::Target#attached?
- boolean of the check the exists ofFerrum::Target#page
Ferrum::Page::Screenshot::DEFAULT_PDF_OPTIONS
- pdf settings constantFerrum::Page::Screenshot::PAPER_FORMATS
- available formats constantFerrum::Page::Frames
module implementation:#main_frame
- attribute reader as new instance ofFerrum::Frame
created byRuntime.executionContextCreated.context.auxData.frameId
#frames
- results of delegated#values
method into instance variableframes
#frame_by
- searching method by attributes: id, execution_id, name (optional)#frames_subscribe
- apply listeners of 'Page/Network/Runtime' streams of the frame-related events
Ferrum::Browser#add_script_tag
- delegation toFerrum::Page#add_script_tag
Ferrum::Browser#add_style_tag
- delegation toFerrum::Page#add_style_tag
Ferrum::Network::AuthRequest
class implementation:- initializer accepts two arguments:
page
as first - instance ofFerrum::Page
params
as second - params fromon
subscriber "Fetch.authRequired"#navigation_request?
- delegation toisNavigationRequest
of passed to instanceparams
#auth_challenge?
- strict equal ofsource
as argument with delegation toauthChallenge.source
of passed to instanceparams
#match?
- boolean match ofregexp
as argument with#url
#continue
- fires thecommand
Fetch.continueWithAuth
onFerrum::Page
instance with passedoptions
as argument#abort
- fires thecommand
Fetch.failRequest
onFerrum::Page
instance with errorReason: "BlockedByClient" on currentrequestId
#url
- delegation torequest.url
of passed to instanceparams
#method
- delegation torequest.method
of passed to instanceparams
#headers
- delegation torequest.headers
of passed to instanceparams
#initial_priority
- delegation torequest.initialPriority
of passed to instanceparams
#referrer_policy
- delegation torequest.referrerPolicy
of passed to instanceparams
#inspect
- simple implementation of nativeinspect
method with returns of the current internal state
Ferrum::Page::Screenshot#screenshot
- handle:full
optionFerrum::Page::Frame
intoFerrum::Frame
:- initializer accepts three arguments:
id
as first - value ofPage.frameAttached.frameId
page
as second - instance ofFerrum::Page
parent_id
as third - withnil
as default valueFerrum::Page::Frame#name/Ferrum::Page::Frame#name=
- class attribute accessorFerrum::Page::Frame#state=
- attribute writer forstate
instance variable, can bestarted_loading | navigated | scheduled_navigation | cleared_scheduled_navigation | stopped_loading
Ferrum::Page::Frame#main?
- boolean of the check the not existed parent_id instance variableFerrum::Page::Frame#execution_context_id
converted intoFerrum::Frame#execution_id
with useexecution_id
instance variableFerrum::Page::Frame#frame_url
intoFerrum::Frame#url
- 'document.location.href' referenceFerrum::Page::Frame#frame_title
intoFerrum::Frame#title
- 'document.title' referenceFerrum::Page::Frame#inspect
- simple implementation of nativeinspect
method with returns of the current internal state
Ferrum::Page::DOM
intoFerrum::Frame::DOM
:Ferrum::Page::DOM#title
renamed intoFerrum::Frame::DOM#current_title
Ferrum::Frame::DOM#doctype
- serialized 'document.doctype' referenceFerrum::Frame::DOM#css/Ferrum::Frame::DOM#at_css
- added@page
references for command related methods
Ferrum::Page::Runtime
intoFerrum::Frame::Runtime
:Ferrum::Frame::DOM#evaluate_on
- added@page
references for command related methodsFerrum::Frame::SCRIPT_SRC_TAG
- js implementation for: createElement <script>, fil insrc
with appendChild into document.headFerrum::Frame::SCRIPT_TEXT_TAG
- js implementation for: createElement <script>, fil intext
with appendChild into document.headFerrum::Frame::STYLE_TAG
- js implementation for: createElement <style> with appendChild into document.headFerrum::Frame::LINK_TAG
- js implementation for: createElement , fil inhref
with appendChild into document.headFerrum::Frame::Runtime#add_script_tag
- firesevaluate_async
with passed args: url, path, content, type: "text/javascript"Ferrum::Frame::Runtime#add_style_tag
- firesevaluate_async
with passed args: url, path, content
Ferrum::Network
- switch from deprecatedNetwork.continueInterceptedRequest
toFetch.continueRequest
Ferrum::Network::Exchange
:- first argument
page
for initialize with fillpage
instance variable #build_response
- fix arguments forNetwork::Response.new
#inspect
- simple implementation of nativeinspect
method with returns of the current internal state
- first argument
Ferrum::Network::InterceptedRequest
:#interception_id
into#request_id
asrequestId
reference on passedparams
#respond
- thecustom request fulfilment support
implementation by fires thecommand
Fetch.failRequest
onFerrum::Page
instance with passedoptions
as argument
Ferrum::Network::Response
:- first argument
page
for initialize with fillpage
instance variable #body
- implementation of ability to get response body by fires thecommand
Network.getResponseBody
onFerrum::Page
instance with on specificrequestId
#main?
- boolean of equalspage.network.response
and current class instance#==
- boolean of equals passed argument object.id and currentrequestId
fromparams
instance variable#inspect
- simple implementation of nativeinspect
method with returns of the current internal state
- first argument
Ferrum::Node
:- replaced first argument
page
intoframe
/page
instance variable initialized asframe.page
#frame_id
- delegation toframeId
of passed to instancedescription
#frame
- instance of frame frompage
instance found by#frame_id
- replaced first argument
Ferrum::Page::Event
- add frames implementation:event/document_id
attribute readers#subscribe
listeners replaced with#frames_subscribe
from includedFerrum::Page::Frames
instance#resize
- evaluate JS: document.documentElement.scrollWidth, document.documentElement.scrollHeight for fullscreen case
Ferrum::Page
#frame_name
#frame_url
, with delegatedFerrum::Browser#frame_url
#frame_title
, with delegatedFerrum::Browser#frame_title
#within_frame
, with delegatedFerrum::Browser#within_frame
Ferrum::Page::Event
:- include DOM, Runtime, Frame
waiting_frames
instance variableframe_stack
instance variable
0.5.0 - (Sep 27, 2019)
- description of
Thread safety
approach section in README Ferrum::NoSuchTargetError
Ferrum::Network::Request#url_fragment
- delegation tourlFragment
of instancerequest
- The removing of temporary directory on
Ferrum::Browser::Process#stop
:Ferrum::Browser::Process.directory_remover
proc for remove entry with the passed path to the temporary directory as an argument Ferrum::Page#viewport_size
- evaluates JS:innerWidth
andinnerHeight
values onwindow
objectFerrum::Page#document_size
- evaluates JS:offsetWidth
andoffsetHeight
values ondocument.documentElement
objectFerrum::Browser#viewport_size
- delegation toFerrum::Page#viewport_size
Ferrum::Context
class implementation:- initializer accepts three arguments:
browser
as first - instance ofFerrum::Browser
contexts
as second - instance ofFerrum::Contexts
id
as third - the value of browser command:Target.createBrowserContext.browserContextId
- includes
id
attribute reader - the passed argument:id
- includes
targets
attribute reader - the thread safe instance of hash - includes
pendings
attribute reader - the thread safe instance of mutable variable - includes
POSITION
constant - the freeze array offirst
last
symbols #default_target
- memoization of#create_target
result#create_target
- assignstarget.id
as fetch oftargetId
fromTarget.createTarget
with assigntarget
fromtargetInfo
#page
- delegation todefault_target
ofFerrum::Context
#pages
- delegations topage
's taken fromFerrum::Context#targets
asvalues
#windows
- delegations topage
's taken fromFerrum::Context#targets
asvalues
withwindow?
truthy condition takesposition
as first argument and optional second argumentsize
with1
as default value may raiseArgumentError
on the passedposition
which not included intoFerrum::Context::POSITION
constant values#create_page
- delegation totarget
with thetarget
recreation byFerrum::Context#create_target
#add_target
- creates new instance ofFerrum::Target
with fill byFerrum::Target.window?
condition of:targets
instance variable onid
orpendings
instance variable as replace of@value
#update_target
- updates specifictarget
intargets
instance variable bytarget_id
andparams
which are passed as arguments#delete_target
- deletes fromtargets
instance variable by passedtarget_id
as argument#dispose
- disposes fromcontexts
instance variable by passedid
as attribute reader#inspect
- simple implementation of nativeinspect
method with returns of the current internal state
Ferrum::Target
class implementation:- initializer accepts two arguments:
browser
as first - instance ofFerrum::Browser
params
as second (optional) - instance ofFerrum::Contexts
#update
- attribute writer forparams
instance variable by passedparams
as one argument#page
- new instance ofFerrum::Page
created for specifictargetId
#window?
- boolean of the check the exists ofFerrum::Target#opener_id
#id
- delegation totargetId
of passed to instanceparams
#type
- delegation totype
of passed to instanceparams
#title
- delegation totitle
of passed to instanceparams
#url
- delegation tourl
of passed to instanceparams
#opener_id
- delegation toopenerId
of passed to instanceparams
#context_id
- delegation tobrowserContextId
of passed to instanceparams
Ferrum::Contexts
class implementation: (subscriber onTarget.targetCreated
)- initializer accepts
browser
as the one argument - includes
contexts
attribute reader - the thread safe instance of hash #default_context
- memoization of#create
result#find_by
- finding the last match incontexts
instance variable by match of passedtarget_id
intotargets.keys
requiredtarget_id: value
argument returnsnil
on the not-matched case#create
- assigns new instance ofFerrum::Context
with fetchedbrowserContextId
fromTarget.createBrowserContext
intocontexts
instance variable returns the created instance ofFerrum::Context
#dispose
- removes specificcontext
fromcontexts
instance variable by passedcontext_id
with firesTarget.disposeBrowserContext
browser command returnstrue
boolean on the success dispose#reset
- nullify thedefault_context
instance variable and fires thedispose
method on eachcontext
incontexts
instance variable
- initializer accepts
Ferrum::Browser#contexts
- reader ofFerrum::Contexts
instance:Ferrum::Browser#default_context
- delegation toFerrum::Browser#contexts
- the delegation to
Ferrum::Browser#default_context
:Ferrum::Browser#create_target
Ferrum::Browser#create_page
Ferrum::Browser#pages
Ferrum::Browser#windows
Ferrum::NoSuchWindowError
intoNoSuchPageError
Ferrum::Page::NEW_WINDOW_WAIT
moved as unchanged toFerrum::Target
Ferrum::Browser#page
- the delegation fromFerrum::Browser#targets
toFerrum::Browser#default_context
Ferrum::Browser#page
- from the instance ofFerrum::Browser#targets
into delegation toFerrum::Browser#default_context
Ferrum::EmptyTargetsError
the hack to handlenew window
which doesn't have events at all byFerrum::Page#session_id
withTarget.attachToTarget
andTarget.detachFromTarget
usageFerrum::Page#close_connection
- the logic is moved toFerrum::Page#close
directly- the third argument (
new_window = false
) forFerrum::Page
initializer Ferrum::Targets
class with the delegations toFerrum::Targets
instance inFerrum::Browser
instance:Ferrum::Browser#window_handle
Ferrum::Browser#window_handles
Ferrum::Browser#switch_to_window
Ferrum::Browser#open_new_window
Ferrum::Browser#close_window
Ferrum::Browser#within_window
0.4.0 - (Sep 17, 2019)
Ferrum::Network
module - moved logic fromFerrum::Page::Net
with addition changesFerrum::Browser#network
- instance ofFerrum::Network
from delegatedFerrum::Page
instanceFerrum::Network#request
&Ferrum::Network#response
- delegation toNetwork::Exchange
instanceFerrum::Network#first_by
/Ferrum::Network#last_by
- implemented searching by passed request_id inNetwork::Exchange
instanceFerrum::Browser#traffic
delegation toFerrum::Network
ofNetwork::Exchange
instancesFerrum::Network::Exchange
- simple request/response constructor with monitoring#build_request
- instance ofNetwork::Request
with passed params#build_response
- instance ofNetwork::Response
with passed params#build_error
- instance ofNetwork::Error
with passed params#navigation_request?
- the request verification on document by passed frame_id#blocked?
- boolean which becomes true when no the constructed response#to_a
- returns array of constructed request/response/error instances
Ferrum::Network::Request#type
- delegation totype
of passed to instance paramsFerrum::Network::Request#type?
- boolean compare withtype
of instance with passed type as argumentFerrum::Network::Request#frame_id
- delegation toframeId
of passed to instance paramsFerrum::Network::InterceptedRequest#abort
- firescontinue
method of instance witherrorReason
asAborted
Ferrum::Network::InterceptedRequest#inspect
- simple implementation of nativeinspect
method with returns of the current internal stateFerrum::Page::Frame#frame_id
- reader to public available offrameId
byFerrum::Page#frame_id
- description of
Network/Authorization/Interception
sections in README Ferrum::Browser#screenshot
&Ferrum::Browser#pdf
methods are returns bin when no path is givenFerrum::Browser#status
delegated toFerrum::Network
Ferrum::Browser#authorize
delegated toFerrum::Network
Ferrum::Network
module intoclass
approach forInterceptedRequest/Request/Response/Error
classesFerrum::Browser#intercept_request
intoFerrum::Network#intercept
Ferrum::Browser#subscribe
intoFerrum::Network#subscribe
with public availableFerrum::Browser#authorized_response
intoFerrum::Network#authorized_response
with public availableFerrum::Browser#clear_memory_cache
&Ferrum::Browser#clear_network_traffic
merged toFerrum::Network#clear
with addition oftraffic
clear by the argument as symbol type oftraffic/cache
Ferrum::Network::Request#time
- usewallTime
params fir time detectionbody_size
attribute writer ofFerrum::Network::Response
with reduce of size on headers_size to handleencodedDataLength
whenNetwork.responseReceived
is not dispatched
Ferrum::Network::Response#redirect_url
Ferrum::Page::Net
Ferrum::Browser#abort_request
Ferrum::Browser#continue_request
Ferrum::Browser#response_headers
Ferrum::Browser#network_traffic
Ferrum::Network::InterceptedRequest#is_navigation_request=
(attribute writer)
0.3.0 - (Sep 12, 2019)
- CI build by TravisCI for ruby versions:
2.3/2.4/2.5/2.6/jruby-9.2.8.0
- fix specs with support of MacOS time formats
Ferrum::Mouse::CLICK_WAIT
asFERRUM_CLICK_WAIT
ENV-var
with0.1
as default valueFerrum::Browser#authorize
option:type
with valid values:server
(by default),:proxy
- Logo 🎉
Ferrum::Node#inner_text
- evaluates JS:this.innerText
on Node instanceFerrum::Page::Runtime::INTERMITTENT_ATTEMPTS
asFERRUM_INTERMITTENT_ATTEMPTS
ENV-var
with6
as default valueFerrum::Page::Runtime::INTERMITTENT_SLEEP
asFERRUM_INTERMITTENT_SLEEP
ENV-var
with0.1
as default valueFerrum::Page#on
getting thename
as option with:dialog/:request_intercepted
cases &block
as last argumentFerrum::Browser#on
- delegated actions toFerrum::Page
instanceFerrum::Dialog
object to handle JavaScript Dialog's- required
page, params
as init arguments #accept
fires JS:Page.handleJavaScriptDialog
as command on providedFerrum::Page
instance with options which includedaccept: true
#dismiss
fires JS:Page.handleJavaScriptDialog
as command on providedFerrum::Page
instance withaccept: false
#match?
compare message by passed regexp- description of
Dialog
feature in README
- required
Ferrum::Page::Event
extend ofConcurrent::Event
with implementation ofreset/wait
fix- implement
Ferrum::Page::Event#iteration
to reusesynchronize
block on@iteration
value ofConcurrent::Event
- redefinition of
Concurrent::Event#reset
- increase@iteration
outside ofif @set
block
- implement
FERRUM_PROCESS_TIMEOUT
ENV-var
asFerrum::Browser::Process::PROCESS_TIMEOUT
with2
as default value- Elapsed time implementation:
Ferrum::Browser::Process::WAIT_KILLED
with0.05
Ferrum.monotonic_time
- delegation toConcurrent
objectFerrum.started
- class variable@@started
asmonotonic_time
Ferrum.elapsed_time
- a difference ofmonotonic_time
as minuend and passed time as argument or@@started
as subtrahendFerrum.timeout?
- boolean compare passed values(start, timeout)
byelapsed_time
- JRuby support by replaces of
::Process::CLOCK_MONOTONIC
usages according toElapsed-time
implementation
- fix globally changing of Thread behaviour on options
abort_on_exception/report_on_exception
Ferrum::Page::Input#find_position
intoFerrum::Node#find_position
Ferrum::Browser#scroll_to
intoFerrum::Mouse#scroll_to
- option
:timeout
into:wait
forFerrum::Page#command
/Ferrum::Mouse#click
- description of
Authorization
options in README Ferrum::Page::Net#intercept_request
block as last argument intoFerrum::Page::Net#on(:request_intercepted)
with passed blockFerrum::Browser::TIMEOUT
intoFerrum::Browser::DEFAULT_TIMEOUT
asFERRUM_DEFAULT_TIMEOUT
ENV-var
with5
as default value- usage of
Concurrent::Event
intoFerrum::Page::Event
as@event
ofFerrum::Page
instance Ferrum::Page::NEW_WINDOW_BUG_SLEEP
intoFerrum::Page::NEW_WINDOW_WAIT
asFERRUM_NEW_WINDOW_WAIT
ENV-var
with0.3
as default value
Ferrum::Page::Input
Ferrum::Browser#proxy_authorize
/Ferrum::Page::Net#proxy_authorize
Ferrum::ModalNotFoundError
Ferrum::Page#reset_modals
with delegation toFerrum::Browser
Ferrum::Page#find_modal
with delegation toFerrum::Browser
Ferrum::Page#accept_prompt
with delegation toFerrum::Browser
Ferrum::Page#dismiss_confirm
with delegation toFerrum::Browser
Ferrum::Page#accept_confirm
with delegation toFerrum::Browser
Ferrum::Browser#on_request_intercepted
0.2.1 - (Sep 5, 2019)
- handle
EOFError/Errno::ECONNRESET/Errno::EPIPE
errors with rescue - description options of
Customization
in README
- increased
Browser::Process::PROCESS_TIMEOUT
constant by 1 Ferrum::Network::InterceptedRequest#match?
to handle cases forRuby 2.3
and less
0.2.0 - (Sep 3, 2019)
- snippet examples of the actions in README
Ferrum::Node#focus
- fires thecommand
DOM.focus
onFerrum::Page
instanceFerrum::Node#blur
- evaluates JS:this.blur()
onFerrum::Page
instanceFerrum::Node#click
- fires the nativeclick
onFerrum::Page
instance- usage of
FERRUM_INTERMITTENT_ATTEMPTS
ENV-var
on the rescue of runtime intermittent error - implementation's of
Ferrum::Page::DOM#xpath
&Ferrum::Page::DOM#at_xpath
Ferrum.with_attempts
- retry attempt with the sleep on the block passed as an argumentFerrum::NoExecutionContextError
- raises when there's nocontext
availableFerrum::Node#attribute
- evaluates JS:this.getAttribute
with passedname
Ferrum::Mouse
- dedicated class ofmouse
actions:click/down/up/move
Ferrum::Browser#mouse
- delegated actions toFerrum::Mouse
instance extracted fromFerrum::Page::Input
Ferrum::Page::Input#find_position
- usage ofDOM.getContentQuads
to find position of node bytop/left
Ferrum::Keyboard
- dedicated class ofkeyboard
actions:down/up/type/modifiers
Ferrum::Browser#keyboard
- delegated actions toFerrum::Keyboard
instance extracted fromFerrum::Page::Input
Ferrum::Headers
dedicated class of headers manager withget/set/clear/add
actions which delegated toFerrum::Page
instanceFerrum::Cookies
dedicated class which includes logic fromFerrum::Browser::API::Cookie
&Ferrum::Cookie
with actions:all/[]/set/remove/clear
Ferrum::Page#cookies
- delegated actions toFerrum::Cookies
instanceFerrum::Page::Screenshot
module with methodsscreenshot/pdf
implemented by commandsPage.captureScreenshot/Page.printToPDF
Ferrum::Browser#screenshot
- delegated actions toPage::Screenshot
moduleFerrum::Network::InterceptedRequest
auth_challenge?
match?
abort
continue
url
method
headers
initial_priority
referrer_policy
Ferrum::Browser#intercept_request
- method with delegated toFerrum::Page::Net
which sets pattern intoNetwork.setRequestInterception
Ferrum::Browser#on_request_intercepted
- method with delegated toFerrum::Page::Net
which applies passed blockFerrum::Browser#abort_request
- method with delegated toFerrum::Page::Net
which stops request by passed interception_id
Ferrum::Page::Input#send_keys
intoFerrum::Page::Input#type
Ferrum::DeadBrowser
intoFerrum::DeadBrowserError
Ferrum::ModalNotFound
intoFerrum::ModalNotFoundError
Ferrum::StatusFailError
intoFerrum::StatusError
Ferrum::NodeError
intoFerrum::NodeNotFoundError
Ferrum::Page#go_back
intoFerrum::Page#back
Ferrum::Page#go_forward
intoFerrum::Page#forward
Ferrum::Page::Dom#property
intoFerrum::Page#property
Ferrum::Page::Dom#select_file
intoFerrum::Page#select_file
Ferrum::Node::#click
getting themode
argument as option withright/double/left
casesFerrum::Page::Frame#switch_to_frame
intoFerrum::Page::Frame#within_frame
with added case ofArgumentError
Ferrum::ObsoleteNode
errorFerrum::FrameNotFound
errorFerrum::Page::Input#set
#set
#select
#type
#generate_modifiers
Ferrum::Node
#attributes
#[]
#select_option
#unselect_option
#visible?
#checked?
#selected?
#disabled?
#path
#right_click
#double_click
Ferrum::Browser::API
-Header, Cookie, Screenshot, Intercept
Ferrum::Browser
#set_overrides
#url_whitelist
#url_blacklist
0.1.2 - (Aug 27, 2019)
- catch of the intermittent errors inside of
evaluate's
methods Ferrum::Page::Runtime#evaluate_on
- firesRuntime.callFunctionOn
command withfunctionDeclaration
onFerrum::Page
Ferrum::Page::Runtime#evaluate_in
0.1.1 - (Aug 26, 2019)
- stringify the
url
which passed toFerrum::Page#goto
0.1.0 - (Aug 26, 2019)
- fires the
Ferrum::NodeError
on zero ofnode_id
- basic description in README
0.1.0.alpha - (Aug 2, 2019)
- Initial implementation
Ferrum
Ferrum::Network
- simple requests/responses data storeFerrum::Browser
- basic command interfaceFerrum::Cookie
- simple store of the cookie attributesFerrum::Node
- abstract level of DOM-node with basic methodsFerrum::Page
- basic object of the command references, which includedDOM
, network and browser logicFerrum::Targets
- initialize of thewindow
manager with a clean browser state- classes of errors with a description of specific reason