2016-06-13 54 views
29

我使用Firefox 47.0和Selenium 2.53。最近他們一直是Selenium和Firefox之間的一個錯誤,導致代碼無法正常工作。其中一個解決方案是使用Marionnette驅動程序。如何在Selenium上使用壁虎可執行文件

我跟着這個site的指令,利用這個新的驅動程序與RemotWebDriver,但我一直有錯誤:

WARN - 異常:異常在線程「主要」 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和壁虎來驅動的問題,您有任何的關於它的消息嗎?

回答

10

我也面臨着同樣的問題,並得到了一天後,分辨率:

的異常來,因爲系統需要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鏈接。

如果問題沒有得到解決,請讓我知道。

+0

謝謝...我得到'產生的原因:java.net.ConnectException:連接被拒絕:connect'您的4號線在這裏...任何想法可能是關於? –

+0

根據我的理解,當連接被遠程拒絕時,ConnectException將會出現。你有沒有給第一行中的geckodriver提供正確的路徑? –

+0

哈!謝謝...最終讓它工作。感謝您花費寶貴的生命在這一天......我不知道「壁虎」,「木偶」和「能力」這一切都是關於什麼的?爲什麼這麼重要,你必須跳過這個循環才能使用Selenium 3.0.0。 –

25

最近硒推出硒3,如果你試圖使用Firefox的最新版本,那麼你必須使用GeckoDriver:

System.setProperty("webdriver.gecko.driver","G:\\Selenium\\Firefox driver\\geckodriver.exe"); 
WebDriver driver = new FirefoxDriver(); 

You can check full documentation from here

+5

這個解決方案顯然與Windows有關(因爲路徑)。是否有獨立於平臺的方式來執行此操作,還是需要爲每臺要運行Selenium 3代碼的機器設置? – Brick

+1

我們傾向於做的是有一個conf。文件,該文件是環境特定的(測試機IP,各種端口,路徑等),並把它作爲這樣的,但沒有,我是不是很高興與具有指定可執行文件的路徑,以便能夠運行測試。如果有人有更好的想法,我會很感激被啓發。 –

+0

對於mac,你可以從這裏下載webdriver:https://github.com/mozilla/geckodriver/releases。還設置屬性像這樣System.setProperty(「webdriver.gecko.driver」,「/ Users/gecko/geckodriver」); – wasabi

1

我創建的原型maven-一個簡單的Java應用程序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"); 
+0

我嘗試過給定的屬性行,但我無法在mac機器上啓動Firefox瀏覽器。 – SelenyanC2

6

上方做工精細的解決方案,爲本地測試和發射從java代碼中啓動瀏覽器。如果你喜歡後來啓動硒電網,那麼這個參數i是個必須以告訴遠程節點在哪裏可以找到geckodriver:當在自動化的Java代碼指定

-Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe" 

節點無法找到壁虎驅動程序。

所以該節點的完整的命令對子級來(假設節點和樞紐用於測試目的住同一臺機器上):

java -Dwebdriver.gecko.driver="C:\geckodriver\geckodriver.exe" -jar selenium-server-standalone-2.53.0.jar -role node -hub http://localhost:4444/grid/register 

你應該期望在節點日誌中看到:

00:35:44.383 INFO - Launching a Selenium Grid node 
Setting system property webdriver.gecko.driver to C:\geckodriver\geckodriver.exe 
+1

給定的語法拋出一個例外與較新的硒服務器版本(如3.2.0): 線程「主」com.beust.jcommander.ParameterException異常:未知選項:-Dwebdriver.gecko.driver = geckodriver.exe 在com.beust.jcommander.JCommander.parseValues(JCommander.java:742) ... 爲了避免這種情況,您需要更改的參數順序(先申報財產,罐子和程序ARGS。後)。例如: 的java -Dwebdriver.gecko.driver = 「./ geckodriver.exe」 罐子硒 - 服務器 - 獨立-3.2.0.jar -role節點-hub http://10.64.201.100:4444/grid/register/ – voji

3

我儘量簡化。您在使用硒3+兩種選擇:

  • 無論是升級火狐47.0.1或更高版本,並使用Selenium3的默認 geckodriver。

  • 或者通過將marionette指定爲假 並使用舊版Firefox驅動程序禁用geckodriver的使用。運行硒 的簡單命令是:java -Dwebdriver.firefox.marionette=false -jar selenium-server-standalone-3.0.1.jar。您也可以禁用其他答案中提到的其他命令使用 geckodriver。

+0

謝謝,這對我嘗試在Debian上安裝iceweasel時設置代碼隱藏起了作用。 – dgig

9

您可以使用​​自動處理Firefox驅動程序。

這個庫下載您的平臺(Mac上,WINDOWNS,Linux)的適當的二進制(geckodriver),然後出口所需的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>2.1.0</version> 
</dependency> 

WebDriverManager做魔術爲您提供:

  1. 它檢查最新版本的WebDriver二進制文件
  2. 它下載webdriver的二進制文件,如果它不存在您的系統上
  3. 它出口的硒

到目前爲止所需的必要webdriver的Java環境變量,WebDriverManager支持ChromeOperaInternet ExplorerMicrosoft EdgePhantomJSFirefox

1

這可能是由於系統找不到firefox安裝路徑的位置。

請嘗試下面的代碼,這應該工作。

System.setProperty("webdriver.firefox.bin","C:\\Program Files\\Mozilla Firefox\\firefox.exe"); 
System.setProperty("webdriver.gecko.driver","<location of geckodriver>\\geckodriver.exe"); 
0

重要的是要記住,的驅動程序(文件)必須具有執行權限(Linux的使用chmod + X geckodriver)是很重要的。

綜上所述:

  1. 下載壁虎司機
  2. 添加執行權限
  3. 添加系統屬性:

    System.setProperty("webdriver.gecko.driver", "FILE PATH");

  4. 實例化和使用類

    WebDriver driver = new FirefoxDriver();

  5. 做你想做的

  6. 關閉驅動程序

    driver.close;

-1

我使用FirefoxOptions類設置二進制位置與Firefox 52.0,GeckoDriver v0.15.0和本文中提到的Selenium 3.3.1 - http://www.automationtestinghub.com/selenium-3-0-launch-firefox-with-geckodriver/

Java代碼,我用 -

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"); 
+0

不是關於'geckodriver.exe',應該使用相同的方式穆克什otwani的回答表明一個字。 – Valya

相關問題