ChromeDriver无法运行(Selenium Webdriver)

时间:2015-07-21 10:34:38

标签: java selenium selenium-webdriver selenium-chromedriver

我写了这样的代码,但是这段代码没有运行chromedriver,我已经用这条路径添加了文件(chromedriver.exe)(\ chromedrive \ chromedriver.exe)。

public class Browser {
    private static WebDriver driver = new ChromeDriver();

    public static WebDriver driver() {
        return driver;
    }

    public static void open(String url) {
        String path = System.getProperty("user.dir");
        System.setProperty("webdriver.chrome.driver",path + "\\chromedrive\\chromedriver.exe");
        driver.manage().window().maximize();
        driver.get(url);
    }
}

public class Page extends LoadableComponent<Page> {

    static String url = "http://-------";

    private static String title = "title";

    public Page() {
        PageFactory.initElements(Browser.driver(), this);
    }

    @Override
    protected void load() {
        // TODO Auto-generated method stub
        Browser.open(url);
    }

    @Override
    protected void isLoaded() throws Error {
        // TODO Auto-generated method stub
        assertTrue(Browser.driver().getTitle().equals(title));
    }
}

public class PageTests {
    @Test
    public void pageTest() {
        Page page = new Page();
        page.get();
    }
}

错误消息是:

  

java.lang.ExceptionInInitializerError

     

引起:java.lang.IllegalStateException:驱动程序的路径   必须由webdriver.chrome.driver系统属性设置可执行文件;

3 个答案:

答案 0 :(得分:2)

最初我认为你正在创建Chromedriver,而没有引用那里的exe。

因此,如果你把它改成这样的东西,那么它可能会起作用。

public class Browser {
    private static WebDriver driver;

    public static WebDriver driver() {
        return driver;
    }

    public static void open(String url) {
        String path = System.getProperty("user.dir");
        System.setProperty("webdriver.chrome.driver",path + "\\chromedrive\\chromedriver.exe");
        driver = new ChromeDriver(); //Initilize here
        driver.manage().window().maximize();
        driver.get(url);
    }
}

答案 1 :(得分:1)

当您的应用程序第一次加载时,它会尝试加载Browser类。

在加载类时,JVM将执行指定的所有静态初始化,在这种情况下,它会尝试创建ChromeDriver对象,因为您使用new ChromeDriver()初始化静态字段。此时,尚未调用open方法来设置系统属性,因此会抛出异常,导致JVM退出。

要解决此问题,请创建ChromeDriver对象/之后/设置系统属性(例如,在open方法中)或在启动JVM时设置系统属性:

java -Dwebdriver.chrome.driver=path/to/driver -jar somejar.jar

答案 2 :(得分:1)

您应该在您定义的函数中设置浏览器并设置路径。

试试这个:

  public static void open(String url) {
    String path = System.getProperty("user.dir");
    System.setProperty("webdriver.chrome.driver",path + "\\chromedrive\\chromedriver.exe");
    driver.manage().window().maximize();
     WebDriver driver = new ChromeDriver();
    driver.get(url);
}

无需单独创建驱动程序函数。请删除它。