The Chrome DevTools Protocol (CDP) is a tool for inspecting and debugging Chrome-based browsers. CDP APIs offer abilities to alter network requests, get cookies, delete cache, and do many other operations. These APIs are also useful for automation testing when we need to perform DevTools
related operations.
The Selenium CDP network
object offers methods to monitor the page's network activity. In this article, we'll look at some operations that can be performed on headers, cookies, and browser cache using Selenium 4 CDP with Capybara and Ruby.
To get started, we will install the selenium-webdriver and the selenium-devtools gems. The version of these gems must match the version of the Chrome browser.
To configure Selenium 4 CDP
with Capybara
, we add the following steps:
require 'capybara/rspec'
require 'selenium-webdriver'
require 'selenium/devtools'
Selenium::WebDriver::Chrome::Service.driver_path = 'C:\Users\chromedriver.exe'
Capybara.default_driver = :selenium
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(
app,
browser: :chrome
)
end
Headers
Network tracking must be enabled in order to carry out operations related to the network. This can be done by using the network object's enable
method. After this, we can attach the header to the HTTP request by passing the header values to the set_extra_http_headers
method provided by the network
object. The code would look like:
it 'adds header to HTTP request' do
# Activate network settings
page.driver.browser.devtools.network.enable
# Attach headers to the request using setExtraHTTPHeaders
page.driver.browser.devtools.network.set_extra_http_headers(headers: {
'header_key_1' => 'header_value_1',
'header_key_2' => 'header_value_2'
})
# Visit the desired page
visit('https://desired-page-url.com')
end
Cookies
To attach the cookie to the website, visit the required page and pass the cookie parameters using set_cookies
method. The code snippet would explain how to attach multiple cookies:
it 'adds cookie to a page' do
# Visit the desired page
visit('https://desired-page-url.com')
# Attach the cookie to the page
page.driver.browser.devtools.network.set_cookies(cookies: [
{
name: 'cookie_1_name',
value: 'cookie_1_value',
domain: 'page domain'
},
{
name: 'cookie_2_name',
value: 'cookie_2_value',
domain: 'page domain'
}
])
end
get_all_cookies
method is used to retrieve all the browser cookies.
it 'gets all cookies present on the browser' do
# Visit the page
visit('https://desired-page-url.com')
# Retrieve all the browser cookies
# page.driver.browser.devtools.network.get_all_cookies = > {"id" => 5, "result" => {"cookies"=>[{"name"=>"cookie_name", ...}]}}
cookie_array = page.driver.browser.devtools.network.get_all_cookies['result']['cookies']
end
To retrieve browser cookies for a specific page, get_cookies
method can be used by passing the page URL.
page.driver.browser.devtools.network.get_cookies(urls: ['https://desired-page-url.com'])
Cache
Before running an automation test it's always a good idea to clear the browser cache. This stops the browser from utilizing cached versions of websites while performing the tests. Selenium 4 CDP
offers the option to clear the browser cache
and disable the browser cache
to prevent the browser from using the cached copy of the page.
To delete cache for a webpage the clear_browser_cache
method is used.
it 'clears browser cache' do
page.driver.browser.devtools.network.clear_browser_cache
end
The set_cache_disabled
method is used to prevent the browser from using cache for a webpage. To use this method, we first enable the network setting similar to the header section. Then we call the set_cache_disabled
method by passing the cache_disabled
flag as true.
it 'Disable Browser Cache' do
# Activate network settings
page.driver.browser.devtools.network.enable
# Disable broswer cache
page.driver.browser.devtools.network.set_cache_disabled(cache_disabled: true)
# Visit the page
visit('https://desired-page-url.com')
end
This was just a quick rundown of how to use DevTools
with Capybara
and Selenium Driver
. In our project, we intended to add a header to access the web-page, verify scenarios involving cookie presence, and carry out cache-related tasks. Selenium 4 CDP
was helpful to us in achieving our objective, and we hope it will be for you as well.