Module: Selenium::WebDriver::DriverExtensions::HasPinnedScripts Private

Defined in:
lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Instance Method Summary collapse

Instance Method Details

#pin_script(script) ⇒ DevTools::PinnedScript

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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.

Examples:

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

Parameters:

  • script (String)

Returns:



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb', line 49

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_scriptsArray<DevTools::PinnedScript>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the list of all pinned scripts.

Returns:



30
31
32
# File 'lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb', line 30

def pinned_scripts
  @pinned_scripts ||= []
end

#unpin_script(script) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Unpins script making it undefined for the subsequent calls.

Parameters:



67
68
69
70
71
# File 'lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb', line 67

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