2017-04-14 54 views
2

我正在使用Selenium 3.3.1,我正在測試下面的代碼。驅動程序可執行文件的路徑必須由webdriver.gecko.driver系統屬性設置;

運行下面的錯誤後,會顯示:在線程「主要」 java.lang.IllegalStateException

例外:路徑 到驅動程序可執行文件必須由webdriver.gecko.driver 系統屬性設置;欲瞭解更多信息,請參閱 https://github.com/mozilla/geckodriver。最新版本可以從 在https://github.com/mozilla/geckodriver/releases com.google.common.base.Preconditions.checkState(Preconditions.java:738) 在 org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java下載: 111) 在 org.openqa.selenium.firefox.GeckoDriverService.access $ 100(GeckoDriverService.java:38) 在 org.openqa.selenium.firefox.GeckoDriverService $ Builder.findDefaultExecutable(GeckoDriverService.java:112) 在 org.openqa.selenium.remote.service.DriverService $ Builder.build(DriverService.java:302) at org.openqa.selenium.firefox.FirefoxDriver.toExecutor(FirefoxDriver.java:233) 在org.openqa.selenium.firefox.FirefoxDriver。(FirefoxDriver.java:125) 在 org.openqa.selenium.firefox.FirefoxDriver。(FirefoxDriver.java:121) 在Selenium_login。(Selenium_login.java:13 )在 Selenium_login.main(Selenium_login.java:70) /home/ali/.cache/netbeans/dev/executor-snippets/run.xml:53:Java 返回:1 BUILD FAILED(總時間:0秒)

Java代碼:

import java.io.*; 
import org.apache.commons.io.FileUtils; 
import org.openqa.selenium.By; 
import org.openqa.selenium.OutputType; 
import org.openqa.selenium.TakesScreenshot; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class Selenium_login { 

    public WebDriver driver = new FirefoxDriver(); 

    /** 
    * Open the test website. 
    */ 
    public void openTestSite() { 
     driver.navigate().to("http://testing-ground.scraping.pro/login"); 
    } 

    /** 
    * 
    * @param username 
    * @param Password 
    * 
    *   Logins into the website, by entering provided username and 
    *   password 
    */ 
    public void login(String username, String Password) { 

     WebElement userName_editbox = driver.findElement(By.id("usr")); 
     WebElement password_editbox = driver.findElement(By.id("pwd")); 
     WebElement submit_button = driver.findElement(By.xpath("//input[@value='Login']")); 

     userName_editbox.sendKeys(username); 
     password_editbox.sendKeys(Password); 
     submit_button.click(); 

    } 

    /** 
    * grabs the status text and saves that into status.txt file 
    * 
    * @throws IOException 
    */ 
    public void getText() throws IOException { 
     String text = driver.findElement(By.xpath("//div[@id='case_login']/h3")).getText(); 
     Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("status.txt"), "utf-8")); 
     writer.write(text); 
     writer.close(); 

    } 

    /** 
    * Saves the screenshot 
    * 
    * @throws IOException 
    */ 
    public void saveScreenshot() throws IOException { 
     File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 
     FileUtils.copyFile(scrFile, new File("screenshot.png")); 
    } 

    public void closeBrowser() { 
     driver.close(); 
    } 

    public static void main(String[] args) throws IOException { 
     Selenium_login webSrcapper = new Selenium_login(); 
     webSrcapper.openTestSite(); 
     webSrcapper.login("admin", "12345"); 
     webSrcapper.getText(); 
     webSrcapper.saveScreenshot(); 
     webSrcapper.closeBrowser(); 
    } 
} 

回答

4

從Selenium 3.0開始,您需要使用geckodriver與Firefox進行交互。下載geckodrivergithub取決於您的操作系統和提取geckodriver.exe到一個文件夾。硒

System.setProperty("webdriver.gecko.driver","c:/your/path/to/geckodriver.exe"); 
WebDriver driver = new FirefoxDriver(); 
... 
1

司機構造例如

WebDriver driver = new FirefoxDriver(); 

搜索驅動程序可執行文件,在這種情況下,Firefox的驅動程序搜索壁虎驅動程序可執行文件:

初始化WebDriver之前添加以下行。在情況下,服務是無法找到的異常被拋出

這是那裏的例外來自(注意檢查狀態的方法)

/** 
    * 
    * @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; 
    } 

繼可執行文件會拋出異常的檢查狀態的方法

/** 
    * 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:創建驅動程序對象如下

之前設置系統屬性

以下是代碼片段(Firefox和鉻),其中用於驅動器可執行的驅動程序服務的搜索:

的FireFox:

@Override 
protected File findDefaultExecutable() { 
     return findExecutable(
     "geckodriver", GECKO_DRIVER_EXE_PROPERTY, 
     "https://github.com/mozilla/geckodriver", 
     "https://github.com/mozilla/geckodriver/releases"); 
    } 

鉻:

@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"); 
    } 

其中GECKO_DRIVER_EXE_PROPERTY =「webdriver.gecko.driver」 和CHROME_DRIVER_EXE_PROPERTY =「webdriver.chrome.driver」

類似的是其他瀏覽器的情況下,以下是可用瀏覽器實現

selenium browser support

列表的快照
相關問題