Toutes les réponses ci-dessus sont correctes, voici la petite plongée profonde dans le problème et la solution.
Le constructeur du driver en sélénium par exemple
WebDriver driver = new ChromeDriver();
recherche l'exécutable du pilote, dans ce cas le pilote chrome recherche l'exécutable du pilote chrome, au cas où le service ne trouverait pas l'exécutable, l'exception est levée
c'est de là que vient l'exception (notez la méthode de vérification de l'état)
/**
*
* @param exeName Name of the executable file to look for in PATH
* @param exeProperty Name of a system property that specifies the path to the executable file
* @param exeDocs The link to the driver documentation page
* @param exeDownload The link to the driver download page
*
* @return The driver executable as a {@link File} object
* @throws IllegalStateException If the executable not found or cannot be executed
*/
protected static File findExecutable(
String exeName,
String exeProperty,
String exeDocs,
String exeDownload) {
String defaultPath = new ExecutableFinder().find(exeName);
String exePath = System.getProperty(exeProperty, defaultPath);
checkState(exePath != null,
"The path to the driver executable must be set by the %s system property;"
+ " for more information, see %s. "
+ "The latest version can be downloaded from %s",
exeProperty, exeDocs, exeDownload);
File exe = new File(exePath);
checkExecutable(exe);
return exe;
}
Voici la méthode de vérification de l'état qui lève l'exception
/**
* Ensures the truth of an expression involving the state of the calling instance, but not
* involving any parameters to the calling method.
*
* <p>See {@link #checkState(boolean, String, Object...)} for details.
*/
public static void checkState(
boolean b,
@Nullable String errorMessageTemplate,
@Nullable Object p1,
@Nullable Object p2,
@Nullable Object p3) {
if (!b) {
throw new IllegalStateException(format(errorMessageTemplate, p1, p2, p3));
}
}
SOLUTION : définissez la propriété système avant de créer l'objet pilote comme suit
System.setProperty("webdriver.gecko.driver", "path/to/chromedriver.exe");
WebDriver driver = new ChromeDriver();
Voici l'extrait de code (pour chrome et firefox) où le service de pilote recherche l'exécutable du pilote:
Chrome:
@Override
protected File findDefaultExecutable() {
return findExecutable("chromedriver", CHROME_DRIVER_EXE_PROPERTY,
"https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver",
"http://chromedriver.storage.googleapis.com/index.html");
}
Renard de feu:
@Override
protected File findDefaultExecutable() {
return findExecutable(
"geckodriver", GECKO_DRIVER_EXE_PROPERTY,
"https://github.com/mozilla/geckodriver",
"https://github.com/mozilla/geckodriver/releases");
}
où CHROME_DRIVER_EXE_PROPERTY = "webdriver.chrome.driver" et GECKO_DRIVER_EXE_PROPERTY = "webdriver.gecko.driver"
similaire est le cas pour les autres navigateurs, voici un aperçu de la liste des implémentations de navigateur disponibles