无法在Selenium Webdriver 2中启动Chrome驱动程序

时间:2014-05-30 06:23:00

标签: java google-chrome selenium selenium-chromedriver

我正在尝试从Selenium webdriver打开Chrome浏览器,但我没有这样做。起初我尝试从同一个程序打开Chrome和Firefox。 Firefox浏览器工作得很好,而我得到的错误与ChromeDriver exe文件不存在有关。我下载了ChromeDriver文件,并将其添加到外部JAR中,并使用System.setProperty(方法调用它。

以下是原始代码:

package test.selenium;

import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Selenium_test {

public static void main(String[] args) {

    FirefoxDriver dr1=new FirefoxDriver();
    FirefoxDriver dr2=new FirefoxDriver();

    System.setProperty("webdriver.chrome.driver", "C://chromedriver.exe");

    ChromeDriver dr3=new ChromeDriver();
    ChromeDriver dr4=new ChromeDriver();


    dr1.get("http://google.com");
    dr2.get("http://northeastraveller.com");

    dr3.get("http://quora.com");
    dr4.get("http://facebook.com");
    // TODO Auto-generated method stub

}

}

我将Chrome部分分成了一个名为“Chrome_test”的单独程序,其代码如下

package test.selenium;
import org.openqa.selenium.chrome.ChromeDriver;

 public class Chrome_Test{

 public static void main(String[] args) {


  System.setProperty("webdriver.chrome.driver", "C://chromedriver.exe");

    ChromeDriver dr3=new ChromeDriver();
    ChromeDriver dr4=new ChromeDriver();

    dr3.get("http://quora.com");
    dr4.get("http://facebook.com");
    // TODO Auto-generated method stub

}

}

现在我收到以下错误:

错误:无法找到或加载主类test.selenium.Chrome_Test

我检查了类路径变量,所有似乎都在位。我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

你最好放两个反斜杠,如:

System.setProperty("webdriver.chrome.driver", "C:\\ChromeDriver\\chromedriver.exe");

它会起作用。

答案 1 :(得分:0)

使用反斜杠(\)更改镶边驱动程序属性行,它可以正常工作。

System.setProperty("webdriver.chrome.driver", "C:\\ChromeDriver\\chromedriver.exe");

答案 2 :(得分:0)

我编写的代码会自动下载并安装最新的ChromeDriver到项目根目录(如果没有找到)。这样您就可以收到ChromeDriver实例,而不必担心chromedriver.exe文件。您可以根据自己的需要进行调整。您仍然需要在项目中包含Selenium libraries。对于我下面的ChromeDriverFactory课程,您还需要Apache Commons IOZip4J

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ChromeDriverFactory
{
    private static String chromeDriverRepository = "http://chromedriver.storage.googleapis.com/";

    public static WebDriver getChromeDriver() throws MalformedURLException,
            IOException, ZipException
    {
        String chromeDriverFileName = "chromedriver.exe";
        File chromeDriverFile = new File(chromeDriverFileName);

        if (!chromeDriverFile.exists())
        {
            installChromeDriver();
        }

        setChromeDriverProperty(chromeDriverFileName);

        return new ChromeDriver();
    }

    private static void setChromeDriverProperty(String chromeDriverFileName)
    {
        System.setProperty("webdriver.chrome.driver", chromeDriverFileName);
    }

    private static void installChromeDriver() throws IOException,
            MalformedURLException, ZipException
    {
        String newestVersion = getNewestVersion();
        String targetFile = "chromedriver_win32.zip";
        String downloadUrl = chromeDriverRepository + newestVersion + "/"
                + targetFile;
        String downloadFileName = FilenameUtils.getName(downloadUrl);
        File downloadFile = new File(downloadFileName);
        String projectRootDirectory = System.getProperty("user.dir");

        FileUtils.copyURLToFile(new URL(downloadUrl), downloadFile);

        ZipFile zipFile = new ZipFile(downloadFile);
        zipFile.extractAll(projectRootDirectory);
        FileUtils.deleteQuietly(downloadFile);
    }

    private static String getNewestVersion() throws MalformedURLException,
            IOException
    {
        String newestVersionUrl = chromeDriverRepository + "LATEST_RELEASE";
        InputStream input = new URL(newestVersionUrl).openStream();

        return IOUtils.toString(input);
    }
}