module Selenium::WebDriver::DriverExtensions::HasPinnedScripts

Public Instance Methods

pin_script(script) click to toggle source

Pins JavaScript snippet that is available during the whole session on every page. This allows to store and call scripts without sending them over the wire every time.

@example

script = driver.pin_script('return window.location.href')
driver.execute_script(script)
# navigate to a new page
driver.execute_script(script)

@param [String] script @return [DevTools::PinnedScript]

# File lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb, line 50
def pin_script(script)
  script = DevTools::PinnedScript.new(script)
  pinned_scripts << script

  devtools.page.enable
  devtools.runtime.evaluate(expression: script.callable)
  response = devtools.page.add_script_to_evaluate_on_new_document(source: script.callable)
  script.devtools_identifier = response.dig('result', 'identifier')

  script
end
pinned_scripts() click to toggle source

Returns the list of all pinned scripts.

@return [Array<DevTools::PinnedScript>]

# File lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb, line 31
def pinned_scripts
  @pinned_scripts ||= []
end
unpin_script(script) click to toggle source

Unpins script making it undefined for the subsequent calls.

@param [DevTools::PinnedScript]

# File lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb, line 68
def unpin_script(script)
  devtools.runtime.evaluate(expression: script.remove)
  devtools.page.remove_script_to_evaluate_on_new_document(identifier: script.devtools_identifier)
  pinned_scripts.delete(script)
end