{"id":30700118,"url":"https://github.com/operasoftware/operaprestodriver","last_synced_at":"2025-10-14T18:15:53.183Z","repository":{"id":45108630,"uuid":"1342925","full_name":"operasoftware/operaprestodriver","owner":"operasoftware","description":"OperaPrestoDriver is a vendor-supported WebDriver implementation that enables programmatic automation of Presto-based Opera products (i.e. v12 and older).","archived":false,"fork":false,"pushed_at":"2024-09-19T16:15:09.000Z","size":139633,"stargazers_count":152,"open_issues_count":28,"forks_count":41,"subscribers_count":42,"default_branch":"master","last_synced_at":"2025-09-02T11:50:54.050Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://code.google.com/p/selenium/wiki/OperaDriver","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/operasoftware.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2011-02-08T17:48:50.000Z","updated_at":"2025-08-13T11:08:55.000Z","dependencies_parsed_at":"2025-07-09T08:25:38.975Z","dependency_job_id":"c7ea6b4f-961d-4a61-b816-82be3ff8759d","html_url":"https://github.com/operasoftware/operaprestodriver","commit_stats":null,"previous_names":["operasoftware/operadriver"],"tags_count":168,"template":false,"template_full_name":null,"purl":"pkg:github/operasoftware/operaprestodriver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operasoftware%2Foperaprestodriver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operasoftware%2Foperaprestodriver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operasoftware%2Foperaprestodriver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operasoftware%2Foperaprestodriver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/operasoftware","download_url":"https://codeload.github.com/operasoftware/operaprestodriver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operasoftware%2Foperaprestodriver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020345,"owners_count":26086865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-02T11:43:30.734Z","updated_at":"2025-10-14T18:15:53.166Z","avatar_url":"https://github.com/operasoftware.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"OperaPrestoDriver\n=================\n\nOperaPrestoDriver is a vendor-supported\n[WebDriver](http://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html)\nimplementation developed by [Opera](http://opera.com/) and volunteers\nthat enable programmatic automation of Presto-based Opera\nproducts (i.e. v12 and older). It is a part of the\n[Selenium](http://code.google.com/p/selenium) project.\n\n__Note that OperaPrestoDriver is only compatible with Presto-based Opera browsers\nup until v12.1*. For Blink-based Operas (v15 and onwards), refer to [the\nOperaChromiumDriver project](https://github.com/operasoftware/operachromiumdriver).__\n\nWebDriver is a general purpose library for automating web browsers.\nIt can drive the browser running various tests on your web pages, just\nas if a real user was navigating through them.  It can emulate actions\nlike clicking links, enter text and submitting forms, and reporting\nresults back to you so you know that your website works as intended.\n\nOperaPrestoDriver's end-user emulation ensures that your entire stack (HTML,\nscripts, styling, embedded resources and backend setup) is functioning\ncorrectly without tedious manual testing routines.\n\nOperaPrestoDriver is usable out of the box from the [official Selenium\npackages](https://code.google.com/p/selenium/downloads/list), and can\nbe used no extra setup on any Presto-based version of Opera.\n\n\nDocumentation\n-------------\n\n* [API documentation](http://operasoftware.github.com/operaprestodriver/docs/)\n* [Selenium WebDriver documentation](http://seleniumhq.org/docs/03_webdriver.html)\n* [Python bindings API](http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html)\n* [Ruby bindings API](http://selenium.googlecode.com/svn/trunk/docs/api/rb/index.html)\n* [Complete list of capabilities](https://code.google.com/p/selenium/wiki/DesiredCapabilities)\n\n\nGetting started\n---------------\n\nTo get set up, first\n[download](http://code.google.com/p/selenium/downloads/list) either\nthe *selenium-server-standalone* or *selenium-server* package and make\nsure you have a fairly recent version of Opera installed in a default\nlocation.  Finally, all you need to do is create a new `OperaDriver`\ninstance:\n\n    WebDriver driver = new OperaDriver();\n    driver.get(\"http://opera.com/\");\n\nIf you prefer using a package management system, OperaPrestoDriver is also\navailable through Maven; either as a part of the Selenium package, or\nas a separate package.  The group ID for Selenium is\n[`org.openqa.selenium.*`](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.openqa.*),\nand `com.opera` and artifact ID `operadriver` for OperaPrestoDriver\nspecifically.\n\n\n### Other languages\n\nSince WebDriver provides bindings for several programming languages,\nyou can follow the same approach as above in both\n[Python](http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html)\n(using the [selenium](http://pypi.python.org/pypi/selenium) package)\nand in\n[Ruby](http://selenium.googlecode.com/svn/trunk/docs/api/rb/index.html)\n(using the\n[selenium-webdriver](http://rubygems.org/gems/selenium-webdriver)\ngem).\n\nThe Python equivalent of the above example would be:\n\n    from selenium import webdriver\n    driver = webdriver.Opera()\n    driver.get('http://opera.com/')\n\nThe same in Ruby:\n\n    require 'selenium-webdriver'\n    driver = Selenium::WebDriver.for :opera\n    driver.get('http://opera.com/')\n\nTo execute the tests, please ensure that the environmental variable\n*SELENIUM_SERVER_JAR* contains the path to the\n*selenium-server-standalone* JAR you downloaded earlier.\n\nTo execute the Python test:\n\n    SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar python test.py\n\nAnd for Ruby:\n\n    SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar ruby test.rb\n\n\n### Running the server as a standalone process\n\nOperaPrestoDriver is fully compatible with the\n[RemoteWebDriver](http://code.google.com/p/selenium/wiki/RemoteWebDriver)\nclient.  This allows you to run tests on a remote computer which is\ntypically very useful in a distributed environment.  First, ensure\nthat your Selenium server is running, then create a remote client as\nusual:\n\n    WebDriver driver = new RemoteWebDriver(\"http://localhost:4444\", DesiredCapabilities.opera());\n    driver.get(\"http://opera.com/\");\n\n\nCapabilities\n------------\n\nTo customize Opera and WebDriver in various ways you may request a\ncertain configuration from the Selenium server.  Since not all server\nimplementations supports every WebDriver feature, the client and\nserver should use JSON objects with the properties when describing\nwhich features are desirable.\n\nIn additon to the [general WebDriver\ncapabilities](https://code.google.com/p/selenium/wiki/DesiredCapabilities)\navailable, OperaPrestoDriver has a number of custom capabilities that may be\nrequested.  To request a specific driver configuration you\n\nYou can use the\n[DesiredCapabilities](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/remote/DesiredCapabilities.html)\nclass to request a specific driver configuration.  The Opera-specific\ncapabilities supported are:\n\n| __Capability__              | __Type__ | __Default__ | __Description__ |\n|-----------------------------|----------|-------------|-----------------|\n| __opera.logging.level__     | [Level](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/logging/Level.html)/String/Integer | Level.INFO | (String/Level/Integer) How verbose the logging should be.  Available levels are: SEVERE (highest value), WARNING, INFO, CONFIG, FINE, FINER, FINEST (lowest value), ALL, OFF.\u003cbr /\u003e\u003cbr \u003eThe argument may consist of either a level name as a string, an integer value, a [Level reference](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/logging/Level.html), or null.  If the value is neither of a known name nor an integer, an IllegalArgumentException will be thrown.\n| __opera.logging.file__      | [File](http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html)/String | null     | Where to send the output of the logging.  Default is to not write to file.\n| __opera.product__           | [OperaProduct](http://operasoftware.github.com/operaprestodriver/docs/com/opera/core/systems/OperaProduct.html)/String   | Desktop | The product to request, for example `OperaProduct#DESKTOP` or `OperaProduct#MOBILE`.  It will attempt to locate the product binary based on the operating system's default installation paths if _opera.binary_ is not set.\n| __opera.binary__            | String   | Default location of Opera on system | Path to the Opera binary to use.  If not specified, OperaPrestoDriver will guess the path to your Opera installation (typically */usr/bin/opera*, *C:\\Program Files\\Opera\\opera.exe*, or similar).\n| __opera.arguments__         | String   | null        | Arguments to pass to Opera, separated by spaces.  See `opera -help` for available command-line switches.\n| __opera.emulationProfile__  | [EmulationProfile](http://operasoftware.github.com/operaprestodriver/docs/com/opera/core/systems/EmulationProfile.html)/JSON object | null | Allows you to specify an emulation profile to use with Opera Mobile.\n| __opera.host__              | String   | Non-loopback IP if available, loopback otherwise | The host Opera should connect to.  Since OperaPrestoDriver works in a client-server relationship to Opera (where Opera is the client, driver the server) you can also run remote instances of Opera on other devices; that be a phone, a TV or another computer.\n| __opera.port__              | Integer  | Random port | The port to Opera should connect to.  Setting this capability to 0 will probe for a free, random port, setting it to -1 will ensure compatibility mode using port the default port 7001 for Operas version 11.52 or older.\n| __opera.profile__           | [OperaProfile](http://operasoftware.github.com/operaprestodriver/docs/com/opera/core/systems/operaprofile.html)/string | temporary profile | directory of the profile to use, or an [OperaProfile](http://operasoftware.github.com/operaprestodriver/docs/com/opera/core/systems/operaprofile.html) instance object representing a profile.  if null is given, a random temporary directory is used.  if \"\", an empty string, then the default *~/.autotest* profile directory will be used (for backwards compatibility with opera \u003c 11.60).\n| __opera.autostart__         | Boolean  | true        | Whether to auto-start the Opera binary.  If false, OperaPrestoDriver will wait for a connection from the browser.  Go to *\"opera:debug\"*, enter the correct host/port information, and hit _Connect_ to connect manually.\n| __opera.detach__            | Boolean  | false       | Whether to detach the Opera browser when the driver shuts down.  This will leave Opera running.\n| __opera.display__           | Integer  | null        | The X display to use.  If set, Opera will be started on the specified display.  (Only works on GNU/Linux.)\n| __opera.idle__              | Boolean  | false       | Whether to use Opera's alternative implicit wait implementation.  It will use an in-browser heuristic to guess when a page has finished loading, allowing us with great accuracy tell whether there are any planned events in the document.  This functionality is useful for very simple test cases, but not designed for real-world testing.  It is disabled by default.\n| __opera.runner__            | String | OperaLauncherRunner | Allows you to specify which runner to use to control the Opera browser binary process.\n| __opera.launcher__          | String   | null        | Path to the launcher binary to use.  The launcher is an external wrapper around the browser, and is used for controlling the binary and taking external screenshots.  If left blank, OperaPrestoDriver will use a launcher supplied with the package.\n\nOperaPrestoDriver also supports some of the\n[common desired capabilities](http://code.google.com/p/selenium/wiki/DesiredCapabilities)\ntoo:\n\n  * [__proxy__](http://code.google.com/p/selenium/wiki/DesiredCapabilities#Proxy_JSON_Object)\n\n### Custom profile\n\nFor instance the OperaPrestoDriver can be made to start the browser with\nspecific command-line arguments using the `opera.arguments` key.  This\nkey should define a list of a command-line arguments that should be\npassed to the browser on startup.  For example, to start Opera with a\ncustom profile:\n\n    DesiredCapabilities capabilities = DesiredCapabilities.opera();\n\n    OperaProfile profile = new OperaProfile(\"/path/to/profile\");  // prepared profile\n    capabilities.setCapability(\"opera.profile\", profile);\n\n    WebDriver driver = new OperaDriver(capabilities);\n\n\n### Opera Mobile Emulator\n\nOr to tell the Opera Mobile Emulator to use the tablet UI and a\nspecific screen resolution:\n\n    DesiredCapabilities capabilities = DesiredCapabilities.opera();\n\n    capabilities.setCapability(\"opera.product\", OperaProduct.MOBILE);\n    capabilities.setCapability(\"opera.arguments\", \"-tabletui -displaysize 860x600\");\n\n    WebDriver driver = new OperaDriver(capabilities);\n\n\n#### Emulation profile\n\nAn\n[emulation profile](http://operasoftware.github.com/operaprestodriver/docs/com/opera/core/systems/EmulationProfile.html)\nmay be specified when interacting with Opera Mobile to instruct the\nemulator to use a certain configuration.  You may either give it an\ninstance of\n[OperaMobileEmulation](http://operasoftware.github.com/operaprestodriver/docs/com/opera/core/systems/mobile/OperaEmulationProfile.html)\nwhich transparently deserializes into a JSON object, or a JSON object\ndirectly:\n\n    {\n      profileName: \"foo\",\n      width: 800,\n      height: 600,\n      ppi: 230,\n      ime: \"tablet\",\n      userAgent: \"Android\"\n    }\n\n\n### Logging and X display\n\nSimilarly, to increase the logging verbosity and, for GNU/Linux, ask\nOpera to start on a different X display:\n\n    DesiredCapabilities capabilities = DesiredCapabilities.opera();\n\n    capabilities.setCapability(\"opera.logging.level\", Level.CONFIG);\n    capabilities.setCapability(\"opera.logging.file\", \"/var/log/operadriver.log\");\n    capabilities.setCapability(\"opera.display\", 8);\n\n    WebDriver driver = new OperaDriver(capabilities);\n\n\n### Proxy\n\nIt is also possible to configure a proxy for use with Opera.  The\nproxy configuration is set through the capabilities.  You can use the\n[Proxy](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/Proxy.html)\nhelper in Selenium to manage it:\n\n    DesiredCapabilities capabilities = DesiredCapabilities.opera();\n\n    Proxy proxy = new Proxy();\n    proxy.setHttpProxy(\"127.0.0.1:1234\");\n    capabilities.setCapability(\"proxy\", proxy);\n\n    WebDriver driver = new OperaDriver(capabilities);\n\n\n### Environment variables\n\nTo specify a custom location of the Opera binary and the command-line\narguments to use, you may also use environmental variables.  These are\nthe available variables:\n\n| __Name__          | __Description__                                                                                                                                                                                                              |\n|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| __OPERA_PATH__    | The absolute path to the Opera binary you want to use.  If not set OperaPrestoDriver will try to locate an Opera (desktop or mobile) on your system.                                                                               |\n| __OPERA_ARGS__    | A space-delimited list of arguments to pass on to Opera, e.g. `-nowindow`, `-dimensions 1600x1200`, \u0026c.  See `opera -help` or `operamobile -help` to see available arguments.                                                |\n\nTo set environment variables:\n\n  * __GNU/Linux and Mac__: `export OPERA_PATH=...`, and add this line to `~/.bashrc` (or your shell's configuration file) to use in all future sessions.\n  * __Windows__: Please follow this guide: http://support.microsoft.com/kb/310519\n\n\nSupported Opera versions\n------------------------\n\n### Desktop\n\nThis is a list of the official Opera Desktop versions supported by OperaPrestoDriver.\nPlease note that this Java version of OperaPrestoDriver does not support\nChromium-based Opera v15+ — for that, refer to [the OperaChromiumDriver\nproject](https://github.com/operasoftware/operachromiumdriver).\n\n\n| __Version__ | __Workaround/tweaks needed__                                                                                                |\n|-------------|-----------------------------------------------------------------------------------------------------------------------------|\n| 12.16       |                                                                                                                             |\n| 12.15       |                                                                                                                             |\n| 12.14       |                                                                                                                             |\n| 12.13       |                                                                                                                             |\n| 12.12       |                                                                                                                             |\n| 12.10       |                                                                                                                             |\n| 12.01       |                                                                                                                             |\n| 12.00       |                                                                                                                             |\n| 11.64       |                                                                                                                             |\n| 11.62       |                                                                                                                             |\n| 11.61       |                                                                                                                             |\n| 11.60       |                                                                                                                             |\n| 11.52       | Set `opera.port` to `-1` and `opera.profile` to \"\" (empty string) to disable `-debugproxy` and `-pd` command-line arguments |\n| 11.51       |                                                                                                                             |\n| 11.50       |                                                                                                                             |\n| 11.11       |                                                                                                                             |\n| 11.10       |                                                                                                                             |\n| 11.01       | `-autotestmode` command-line argument is not supported, use a wrapper script                                                |\n| 11.00       |                                                                                                                             |\n\n\n### Mobile\n\nPlease use one of the\n[prepared builds](https://dev.opera.com/articles/mobile-browser-automation/)\nto use OperaPrestoDriver with Opera Mobile.\n\nOperaPrestoDriver does not support the Chromium-based Opera Mobile builds.\n\n#### Wrapper script\n\nSome Opera versions don't support the `-autotestmode`, `-debugproxy`\nor `-pd` arguments sent by OperaPrestoDriver by default.  You can bypass\nthis problem by creating a wrapper script like this and pointing the\ncapability `opera.binary` to its absolute path:\n\n    #!/bin/sh\n    # Wrapper to prevent the -autotestmode argument reaching this version of Opera\n    # which doesn't support it.\n    `dirname $0`/opera\n\n\nDevelopment\n-----------\n\nWhile OperaPrestoDriver is officially maintained by Opera, it is [free\nsoftware](http://fsfe.org/about/basics/freesoftware.en.html) and would\nonly be possible thanks to [many volunteer\ncontributors](https://github.com/operasoftware/operaprestodriver/blob/master/AUTHORS).\nIf you come across a reproducible bug, please [open an\nissue](http://code.google.com/p/selenium/issues/list) to submit a bug\nreport.\n\nEven better, you can send a pull request!  Any changes you make must\nfollow the [Google Coding\nStandards](http://code.google.com/p/java-coding-standards/wiki/Introduction)\nand have test cases attached to them if you introduce a new feature.\n\nMuch of OperaPrestoDriver’s code is shared with the other WebDriver\nimplementations, and for working on this code base you should also\nfamiliarize yourself with the [Selenium code\nbase](http://code.google.com/p/selenium/source/checkout).  There are\nalso a few tips available for [working on\nSelenium](http://code.google.com/p/selenium/wiki/DeveloperTips).\n\n\nSupport\n-------\n\nIf you have problems or questions regarding OperaPrestoDriver or Selenium,\nthere are many channels in which you can seek help:\n\n* __IRC__: The *#selenium* channel on the *irc.freenode.org* network\n* __Mailing lists__: The [webdriver](http://groups.google.com/group/webdriver) or [selenium-users](http://groups.google.com/group/selenium-users) mailing list\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperasoftware%2Foperaprestodriver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foperasoftware%2Foperaprestodriver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperasoftware%2Foperaprestodriver/lists"}