Dans Selenium Grid, j'essaie d'exécuter un programme simple et j'obtiens Cannot find firefox binary in PATH
bien que j'ai ajouté le chemin binaire dans mon code.
Mon code et l'erreur sont donnés ci-dessous. Veuillez avoir besoin d'aide. Merci d'avance.
Code
package Sample;
import Java.net.MalformedURLException;
import Java.net.URL;
import org.openqa.Selenium.Platform;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.remote.DesiredCapabilities;
import org.openqa.Selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
public class sample1 {
WebDriver driver;
String BaseURL,NodeURL;
@BeforeTest
public void beforeTest() throws MalformedURLException {
BaseURL="www.google.com";
NodeURL="http://192.168.10.162:5566/wd/hub";
DesiredCapabilities capa =DesiredCapabilities.firefox();
capa.setBrowserName("firefox");
capa.setCapability("binary", "C:\\Users\\praveenraj.d\\AppData\\Local\\Mozilla Firefox\\firefox.exe");
capa.setPlatform(Platform.ANY);
driver=new RemoteWebDriver(new URL(NodeURL),capa);
}
@Test
public void f() throws InterruptedException {
driver.get(BaseURL);
System.out.println(driver.getTitle());
Thread.sleep(50000);
}
@AfterTest
public void afterTest() {
driver.quit();
}
}
Erreur
[TestNG] Running:
C:\Users\praveenraj.d\AppData\Local\Temp\testng-Eclipse-1233453386\testng-customsuite.xml
FAILED CONFIGURATION: @BeforeTest beforeTest
org.openqa.Selenium.WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: WIN8
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: Host: 'IN-IF-WS1-0154', ip: '192.168.10.162', os.name: 'Windows 8', os.Arch: 'AMD64', os.version: '6.2', Java.version: '1.7.0_07'
Driver info: driver.version: FirefoxDriver
Command duration or timeout: 97 milliseconds
Build info: version: '2.31.0', revision: '1bd294d', time: '2013-02-27 20:53:56'
System info: os.name: 'Windows 8', os.Arch: 'x86', os.version: '6.2', Java.version: '1.7.0_13'
Driver info: org.openqa.Selenium.remote.RemoteWebDriver
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at Java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.Selenium.remote.ErrorHandler.createThrowable(ErrorHandler.Java:187)
at org.openqa.Selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.Java:145)
at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:554)
at org.openqa.Selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.Java:216)
at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:111)
at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:129)
at Sample.sample1.beforeTest(sample1.Java:28)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.Java:84)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.Java:564)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.Java:213)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.Java:138)
at org.testng.TestRunner.beforeRun(TestRunner.Java:641)
at org.testng.TestRunner.run(TestRunner.Java:609)
at org.testng.SuiteRunner.runTest(SuiteRunner.Java:335)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.Java:330)
at org.testng.SuiteRunner.privateRun(SuiteRunner.Java:291)
at org.testng.SuiteRunner.run(SuiteRunner.Java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.Java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.Java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.Java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.Java:1149)
at org.testng.TestNG.run(TestNG.Java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.Java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.Java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.Java:175)
Caused by: org.openqa.Selenium.WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: WIN8
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: Host: 'IN-IF-WS1-0154', ip: '192.168.10.162', os.name: 'Windows 8', os.Arch: 'AMD64', os.version: '6.2', Java.version: '1.7.0_07'
Driver info: driver.version: FirefoxDriver
Build info: version: '2.31.0', revision: '1bd294d', time: '2013-02-27 20:53:56'
System info: os.name: 'Windows 8', os.Arch: 'x86', os.version: '6.2', Java.version: '1.7.0_13'
Driver info: driver.version: FirefoxDriver
at org.openqa.Selenium.firefox.internal.Executable.<init>(Executable.Java:72)
at org.openqa.Selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.Java:59)
at org.openqa.Selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.Java:55)
at org.openqa.Selenium.firefox.FirefoxDriver.getBinary(FirefoxDriver.Java:182)
at org.openqa.Selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.Java:107)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at Java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.Selenium.remote.server.DefaultDriverFactory.callConstructor(DefaultDriverFactory.Java:62)
at org.openqa.Selenium.remote.server.DefaultDriverFactory.newInstance(DefaultDriverFactory.Java:56)
at org.openqa.Selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.Java:216)
at org.openqa.Selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.Java:1)
at Java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at Java.util.concurrent.FutureTask.run(Unknown Source)
at org.openqa.Selenium.remote.server.DefaultSession$1.run(DefaultSession.Java:170)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at Java.lang.Thread.run(Unknown Source)
SKIPPED CONFIGURATION: @AfterTest afterTest
SKIPPED: f
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 1
===============================================
===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 1
===============================================
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@93b52b: 27 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@3ba002: 22 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@fa930d: 6 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@1f9c5c8: 6 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@197f158: 6 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 4 ms
File pathToBinary = new File("C:\\user\\Programme\\FirefoxPortable\\App\\Firefox\\firefox.exe");
FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
FirefoxProfile firefoxProfile = new FirefoxProfile();
WebDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
Une autre option consiste à configurer le serveur plutôt que le client de test.
Configurez le service de nœud esclave afin qu’il sache où se trouve le firefox. L'emplacement d'installation peut changer d'un nœud à l'autre, voire même nécessiter l'exécution de plusieurs services sur un nœud pour prendre en charge l'accès à différentes versions de FF.
Java -jar "Selenium-server-standalone-2.2.0.jar"
-Dwebdriver.firefox.bin="C:\FirefoxCollection\Mozilla Firefox 36.0\firefox.exe"
Assurez-vous que firefox doit s’installer par défaut à l’emplacement -> (c:/Program Files (x86)/mozilla firefox OR c:/Program Files/mozilla firefox, note: au moment de l’installation de Firefox ne changez pas le chemin, laissez-le installer dans le chemin par défaut ) Si Firefox est installé à un autre endroit, Selenium affiche ces erreurs.
Si vous avez défini votre variable firefox dans la variable d’environnement Systèmes (Windows), supprimez-la ou mettez-la à jour avec le nouveau chemin de version de Firefox.
Si vous voulez utiliser Firefox ailleurs, utilisez le code ci-dessous: -
Comme FirefoxProfile est privé, nous devons utiliser FirefoxOptions comme ci-dessous:
Nouveau code:
File pathBinary = new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
FirefoxBinary firefoxBinary = new FirefoxBinary(pathBinary);
DesiredCapabilities desired = DesiredCapabilities.firefox();
FirefoxOptions options = new FirefoxOptions();
desired.setCapability(FirefoxOptions.FIREFOX_OPTIONS, options.setBinary(firefoxBinary));
Le code de travail complet du code ci-dessus est comme ci-dessous:
System.setProperty("webdriver.gecko.driver","D:\\Workspace\\demoproject\\src\\lib\\geckodriver.exe");
File pathBinary = new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
FirefoxBinary firefoxBinary = new FirefoxBinary(pathBinary);
DesiredCapabilities desired = DesiredCapabilities.firefox();
FirefoxOptions options = new FirefoxOptions();
desired.setCapability(FirefoxOptions.FIREFOX_OPTIONS, options.setBinary(firefoxBinary));
WebDriver driver = new FirefoxDriver(options);
driver.get("https://www.google.co.in/");
Téléchargez geckodriver pour firefox à partir de l'URL ci-dessous:
https://github.com/mozilla/geckodriver/releases
Ancien code qui fonctionnera pour les anciennes versions de pots Selenium
File pathBinary = new File("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
FirefoxBinary firefoxBinary = new FirefoxBinary(pathBinary);
FirefoxProfile firefoxProfile = new FirefoxProfile();
WebDriver driver = new FirefoxDriver(firefoxBinary, firefoxProfile);
Avez-vous ajouté firefox à votre chemin après avoir démarré le serveur Selenium? Si tel est le cas, Selenium utilisera toujours l'ancien chemin. La solution consiste à démonter & redémarrer Selenium pour qu'il utilise la variable d'environnement Path mis à jour.
Pour vérifier si firefox est ajouté correctement dans votre chemin, vous pouvez simplement lancer un terminal en ligne de commande "cmd" et taper "firefox" + Entrée. Si firefox démarre, tout va bien et le redémarrage du serveur Selenium devrait résoudre le problème.
J'ai eu le même problème en C # avec Windows 64 bits et le navigateur Firefox 64 bits qui ne semble pas fonctionner avec Selenium. Si vous utilisez le navigateur 64 bits, essayez celui 32 bits.
Étonnamment, le navigateur Firefox 32 bits fonctionne correctement sous Windows 64 bits.
Édité pour clarifier l'intention de mon post.
Je viens d'avoir ce problème sans changer PATH.
Mon PC est Win7, système 64 bits. Si vous utilisez également un système 64 bits, vous pouvez essayer:
Il doit être sous "Program Files (x86)" PAS "Program Files"
J'espère que ça peut aider.
Je n'ai pas vu la réponse C # à cette question ici. L'astuce consiste à définir la propriété BrowserExecutableLocation sur une instance de FirefoxOptions et à la transmettre au constructeur du pilote:
var opt = new FirefoxOptions
{
BrowserExecutableLocation = @"c:\program files\mozilla firefox\firefox.exe"
};
var driver = new FirefoxDriver(opt);
Vous devez ajouter gecko driver
si vous utilisez firefox v50
et ci-dessus.
Utilisez l'exemple de code suivant:
File pathToBinary = new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
FirefoxProfile firefoxProfile = new FirefoxProfile();
System.setProperty("webdriver.gecko.driver","C:\\Users\\Downloads\\Selenium-Java-3.0.1\\geckodriver.exe");
WebDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);
Java -jar Selenium-server-standalone-2.53.1.jar -Dwebdriver.firefox.bin="C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
Mettez le fichier jar Selenium sur le bureau, accédez à cmd et exécutez la commande ci-dessus.
La chose la plus simple à faire est de faire en sorte que vos nœuds de grille inscrivent le chemin binaire de Firefox dans le cadre de la configuration du nœud. Il utilise les mêmes fonctionnalités que le client, mais vous permet de choisir le navigateur par son nom et de laisser le nœud le trouver.
Veuillez également noter que la capacité que vous souhaitez utiliser est "firefox_binary" et non "binary". Vous pouvez voir la liste complète des fonctionnalités de Firefox sur cette page wiki:
Ce problème peut être dû à l'incompatibilité du pilote firefox et de la version de votre navigateur firefox. Téléchargez la dernière version du pilote firefox compatible avec la version mise à jour du navigateur Firefox.
J'ai également faire face au même problème sur Windows 10-64 bits.
Lorsque je suis installé firefox sur mon PC, son emplacement d'installation est "C:\Program Files\Mozilla Firefox\firefox.exe" au lieu de "C:\Program Files (x86)\Mozilla Firefox", car le système d'exploitation est en 64 bits,
Je viens donc de copier/coller le dossier "Mozilla Firefox" dans le dossier "C:\Program Files (x86)" et d'exécuter les scripts Selenium, son travail pour moi.
Ceci est dû au fait que RemoteWebDriver est utilisé dans le code. Il essaie d’appeler le navigateur firefox dans la machine de noeud. Si vous avez spécifié l’emplacement binaire de firefox dans la variable d’environnement "PATH" de la machine de noeud, il ouvre le navigateur firefix lors de son exécution depuis Hub.
Vous devez modifier la variable d’environnement et ajouter son chemin à firefox.exe. La même chose pourrait être faite par programme Comment puis-je définir/mettre à jour la variable PATH à partir de Java sous Windows? . J'ai eu le même problème sous Win8.