SeleniumHQ / selenium

A browser automation framework and ecosystem.
https://selenium.dev
Apache License 2.0
29.76k stars 8.02k forks source link

[🚀 Feature]: Support Electron #13954

Open diemol opened 1 month ago

diemol commented 1 month ago

Feature and motivation

Right now, to run tests on electron apps, it pretty much requires a JavaScript dev environment. Electron versions are defined in the development directory, and npm is used to install the correct version of chromedriver via electron-chromedriver.npm

So the proposal is:

  1. Create an ElectronOptions class that is a subclass of ChromiumOptions, where the browser name is electron.
  2. Create an ElectronDriver class that requires an ElectronOptions argument, and errors if the binary has not been set
  3. Create an ElectronService in case the user wants to specify the location of the chromedriver (maybe?)
  4. Selenium Manager downloads the driver from https://github.com/electron/electron/releases based on the specified version, or gets the latest. I think we should not try to automatically determine the version of the electron app; the app is bundled with a specific runtime version but it appears to be quite challenging to actually surface the version of it.

Usage example

ElectronOptions options = new ElectronOptions();
options.browserVersion = "29.0";
options.binary = "/path/to/electron/app";

ElectronDriver driver = new ElectronDriver(options);
titusfortner commented 1 month ago

I updated the description here. An example of how users are currently working with electron can be found in the Sauce docs

The bindings work should be easy, not certain about the selenium manager piece with the naming conventions