Как использовать исполняемый файл gecko с Selenium
Я использую Firefox 47.0 с Selenium 2.53. Недавно между Selenium и Firefox произошла ошибка, из-за которой код не работал. Одним из решений является использование драйвера Marionnette.
Я следовал инструкциям этого сайта, чтобы использовать этот новый драйвер с RemotWebDriver, но у меня все еще есть ошибка:
WARN - Исключение: Исключение в потоке "main" org.openqa.selenium.WebDriverException: путь к исполняемому файлу драйвера должен быть задан системным свойством webdriver.gecko.driver; Для получения дополнительной информации см. https://github.com/jgraham/wires. Последняя версия может быть загружена с....
Код, который я пробовал до сих пор, очень прост:
public class Test {
static WebDriver driver;
static Wait<WebDriver> wait;
public static void main(String[] args) throws MalformedURLException {
System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");
DesiredCapabilities cap = DesiredCapabilities.firefox();
cap.setCapability("marionette", true);
cap.setBrowserName("firefox");
driver = new RemoteWebDriver(new URL("http://192.168.117.135:5555/wd/hub"), cap);//true to enable the JS
wait = new WebDriverWait(driver, 3000);
final String url = "https://www.google.com/";
JavascriptExecutor js = (JavascriptExecutor) driver;
try {
driver.navigate().to(url);
} finally {
driver.close();
}
}
}
Я уверен, что путь к geckodriver.exe правильный, и я не вижу, где я сделал ошибку.
РЕДАКТИРОВАТЬ 1: я попробовал следующий код:
public class Test {
static WebDriver driver;
static Wait<WebDriver> wait;
public static void main(String[] args) throws MalformedURLException {
System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");
driver = new MarionetteDriver();
wait = new WebDriverWait(driver, 3000);
final String url = "https://www.google.com/";
JavascriptExecutor js = (JavascriptExecutor) driver;
try {
driver.navigate().to(url);
} finally {
driver.close();
}
}
}
и это работает, кажется, что проблема исходит от RemoteWebDriver и драйвера Gecko, у кого-нибудь есть новости по этому поводу?
Ответы
Ответ 1
Недавно Selenium запустил Selenium 3, и если вы пытаетесь использовать последнюю версию Firefox, вы должны использовать GeckoDriver:
System.setProperty("webdriver.gecko.driver","G:\\Selenium\\Firefox driver\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
Вы можете проверить полную документацию здесь
Ответ 2
Я также столкнулся с той же проблемой и получил разрешение через день:
Исключение приходит, потому что System требует Geckodriver для запуска тестового теста Selenium.
Вы можете попробовать этот код под основным методом в Java
System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);
Для получения дополнительной информации Вы можете перейти к этой https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver ссылке.
Пожалуйста, дайте мне знать, если проблема не будет решена.
Ответ 3
Вы можете обрабатывать драйвер Firefox автоматически, используя WebDriverManager.
Эта библиотека загружает соответствующий двоичный файл (geckodriver) для вашей платформы (Mac, Windowns, Linux) и затем экспортирует правильное значение требуемой переменной среды Java (webdriver.gecko.driver).
Взгляните на полный пример в качестве тестового примера JUnit:
public class FirefoxTest {
private WebDriver driver;
@BeforeClass
public static void setupClass() {
WebDriverManager.firefoxdriver().setup();
}
@Before
public void setupTest() {
driver = new FirefoxDriver();
}
@After
public void teardown() {
if (driver != null) {
driver.quit();
}
}
@Test
public void test() {
// Your test code here
}
}
Если вы используете Maven, вы должны поставить на pom.xml
:
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.7.1</version>
</dependency>
WebDriverManager делает магию для вас:
- Он проверяет наличие последней версии двоичного файла WebDriver
- Он загружает двоичный файл WebDriver, если его нет в вашей системе
- Он экспортирует необходимые переменные среды WebDriver Java, необходимые для Selenium
Пока что WebDriverManager поддерживает Chrome
, Opera
, Internet Explorer
, Microsoft Edge
, PhantomJS
и Firefox
.
Ответ 4
Вышеприведенные решения отлично подходят для локального тестирования и запуска браузеров из java-кода. Если вы хотите запустить свою селеновую сетку позже, этот параметр должен иметь, чтобы сообщить удаленный node где найти geckodriver:
-Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe"
node не может найти драйвер gecko, если он указан в коде Java Automation.
Итак, полная команда для node, которая должна быть (при условии, что node и концентратор для целей тестирования живут на одном компьютере):
java -Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe" -jar selenium-server-standalone-2.53.0.jar -role node -hub http://localhost:4444/grid/register
И вы должны ожидать увидеть в журнале node:
00:35:44.383 INFO - Launching a Selenium Grid node
Setting system property webdriver.gecko.driver to C:\geckodriver\geckodriver.exe
Ответ 5
Я пытаюсь сделать это простым. У вас есть два варианта при использовании Selenium 3 +:
-
Либо обновите свой Firefox до 47.0.1, либо используйте
geckodriver of Selenium3.
-
Или отключите использование geckodriver, указав marionette
на false
и использовать устаревший драйвер Firefox. простая команда запуска селена
: java -Dwebdriver.firefox.marionette=false -jar
selenium-server-standalone-3.0.1.jar
. Вы также можете отключить использование
geckodriver из других команд, упомянутых в других ответах.
Ответ 6
При запуске сервера Selenium node необходимо указать системное свойство с пути к файлу .exe. См. Также принятый anwser в селенную сетку с драйвером Chrome (WebDriverException: путь к исполняемому файлу драйвера должен быть задан с помощью свойства webdriver.chrome.driver)
Ответ 7
Я создаю простое приложение Java по архетипу maven-archetype-quickstar, затем пересматриваю pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>bar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bar</name>
<description>bar</description>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.0.0-beta3</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.0.0-beta3</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>3.0.0-beta3</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>3.0.0-beta3</version>
</dependency>
</dependencies>
<build>
<finalName>bar</finalName>
</build>
</project>
и
package bar;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class AppTest {
/**
* Web driver.
*/
private static WebDriver driver = null;
/**
* Entry point.
*
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// Download "geckodriver.exe" from https://github.com/mozilla/geckodriver/releases
System.setProperty("webdriver.gecko.driver","F:\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://localhost:8080/foo/");
String sTitle = driver.getTitle();
System.out.println(sTitle);
}
}
Вы также используете в Mac OS X, Linux: https://github.com/mozilla/geckodriver/releases
и
// On Mac OS X.
System.setProperty("webdriver.gecko.driver", "/Users/donhuvy/Downloads/geckodriver");
Ответ 8
Это может быть связано с тем, что система не может найти установленное Firefox место на пути.
Попробуйте выполнить следующий код, который должен работать.
System.setProperty("webdriver.firefox.bin","C:\\Program Files\\Mozilla Firefox\\firefox.exe");
System.setProperty("webdriver.gecko.driver","<location of geckodriver>\\geckodriver.exe");
Ответ 9
Важно помнить, что драйвер (файл) должен иметь разрешение на выполнение (linux chmod + x geckodriver).
Подводя итог:
- Загрузите драйвер gecko
- Добавить разрешение выполнения
-
Добавить системное свойство:
System.setProperty("webdriver.gecko.driver", "FILE PATH");
-
Создайте и используйте класс
WebDriver driver = new FirefoxDriver();
-
Сделайте все, что захотите
-
Закройте драйвер
driver.close;
Ответ 10
Я использую класс FirefoxOptions для установки двоичного местоположения с Firefox 52.0, GeckoDriver v0.15.0 и Selenium 3.3.1, как упоминалось в этой статье - http://www.automationtestinghub.com/selenium-3-0-launch-firefox-with-geckodriver/
Явный код, который я использовал -
FirefoxOptions options = new FirefoxOptions();
options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //location of FF exe
FirefoxDriver driver = new FirefoxDriver(options);
driver.get("http://www.google.com");