• Selenium, 教學, 軟體品管 29.04.2017 Enter your password to view comments.

    This content is password protected. To view it please enter your password below:

  • Selenium 2移轉到3的重大改變 – Firefox啟動方式

    Image result for selenium 3

    Selenium 3架構上的改變導致原本Selenium 2自動化測試無法正常啟動FireFox

    這篇文主要講解如何解決這個問題?

    Selenium3啟動FireFox的錯誤訊息

    原本在 Selenium 2的環境下 , 不需要其他的設定或是下載其他Browser Webdriver 就可以啟動firefox

    範例程式如下:

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
     
    public class Gecko_Driver {
     
    	public static void main(String[] args) {
    		WebDriver driver = new FirefoxDriver();
    		driver.get("http://www.google.com");
    		Thread.sleep(3000);
    		driver.close();
    	}
     
    }

    但是相同的程式如果使用 Selenium 3執行的時候 , 會出現類似下列錯誤訊息

    java.lang.IllegalStateException…

    The path to the driver executable must be set by webdriver.gecko.driver system propeerty: ‘.

    Geckodriver下載與設計

    Selenium 3之後需要Geckodriver Webdriver 才可以正常啟動,

    因此到這裡下載最新的 Geckodriver 版本

    https://github.com/mozilla/geckodriver/releases

    下載之後必須設定環境變數 Path, 有三個方式:

    1. 我的電腦 > 環境變數 > Path=d:\webdriver\GeckoDriver.exe
    2. System.setProperty(“webdriver.gecko.driver”,”d:\\\\webdriver\\GeckoDriver.exe”);
    3. 設定 Desired Capabilities

    範例程式1: 使用  setProperty

     

    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class Gecko_Driver {
     
    	public static void main(String[] args) throws InterruptedException {
    		// Configure the Geckodriver.exe for selenium3
    		System.setProperty("webdriver.gecko.driver", "D:\\\\webdrivers\\geckodriver.exe");
    		
    		WebDriver driver = new FirefoxDriver();
    		driver.get("http://www.google.com");
     
    		Thread.sleep(3000);
    		driver.close();
    	}
    }

    範例程式2: 使用 Desired Capabilities

    	import org.openqa.selenium.WebDriver;
    	import org.openqa.selenium.firefox.FirefoxDriver;
    	import org.openqa.selenium.remote.DesiredCapabilities;
    public class Gecko_Driver {
     
    	public static void main(String[] args) throws InterruptedException {
    		DesiredCapabilities capabilities = DesiredCapabilities.firefox();
    		
    		// set web driver to Marionette for Selenium3
    		capabilities.setCapability("marionette", true); 
    		WebDriver driver = new FirefoxDriver(capabilities);
    		
    		driver.get("http://www.google.com");
     		Thread.sleep(3000);
    		driver.close();
    	}
    }

     

    總結

    • 如果您目前使用Selenium 2 執行自動化測試,  沒有特別需求的情況, 繼續使用可以暫時不升級至Selenium3
    • 如果你因為Browser版本不相容被迫一定要在Selenium 3 才可以執行, 那麼原本的FireFox則需要額外下載geckodriver與設定才可以執行
    • 如何設定GeckoDriver? 有三種方式:
      • 設定環境變數Path
      • 設定GeckoDriver
      • 設定Capability Set