如何在 Chrome 中运行 Selenium WebDriver 测试用例

我试过了

WebDriver driver = new ChromeDriver();

但我得到的错误是

测试失败: setUp (com.TEST) : 驱动程序可执行文件的路径必须由 webdriver.chrome.Driver 系统属性设置; 有关更多信息,请参见 这里有密码。最新版本可从 这个链接下载

如何让 Chrome 测试 Selenium WebDriver 测试用例?

624522 次浏览

你应该把 chromeDriver 下载到一个文件夹中,然后把这个文件夹添加到你的 PATH 环境变量中。

您必须重新启动控制台才能使其工作。

您需要从以下地址下载可执行驱动程序: 下载 ChromeDriver

然后在创建驱动程序对象之前使用以下命令(已按正确顺序显示) :

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
WebDriver driver = new ChromeDriver();

这是从 ChromeDriver 文档中最有用的指南中提炼出来的。

Chrome 驱动程序下载 GoogleChrome 驱动程序的更新版本。

请阅读发布说明以及 给你

如果 Chrome 浏览器已经更新,那么你需要从上面的链接下载新的 Chrome 驱动程序,因为它将与新的浏览器版本兼容。

public class chrome
{


public static void main(String[] args) {


System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
WebDriver driver = new ChromeDriver();


driver.get("http://www.google.com");
}


}

下载铬驱动程序的 EXE 文件,并将其解压缩到当前项目位置。

下面是链接,我们可以在这里下载最新版本的铬驱动程序:

Https://sites.google.com/a/chromium.org/chromedriver/

下面是启动浏览器和导航到 URL 的简单代码。

System.setProperty("webdriver.chrome.driver", "path of chromedriver.exe");


WebDriver driver = new ChromeDriver();


driver.get("https://any_url.com");

你需要安装 Chrome 驱动程序,你可以使用 NuGet安装这个软件包,如下所示:

找到 chromedriver 给你的最新版本。 下载之后,将其解压缩到 Python 安装的根目录,例如 C:/Program Files/Python-3.5,就是这样。

您甚至不需要在任何地方指定路径和/或将 chromedriver添加到您的路径或类似的内容。 我只是在一个干净的 Python 安装上做了一下,这很有用。

你可以使用下面的代码在 Chrome 中使用 Selenium WebDriver 运行测试用例:

import java.io.IOException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;


public class ChromeTest {


/**
* @param args
* @throws InterruptedException
* @throws IOException
*/
public static void main(String[] args) throws InterruptedException, IOException {
// Telling the system where to find the Chrome driver
System.setProperty(
"webdriver.chrome.driver",
"E:/chromedriver_win32/chromedriver.exe");


WebDriver webDriver = new ChromeDriver();


// Open google.com
webDriver.navigate().to("http://www.google.com");


String html = webDriver.getPageSource();


// Printing result here.
System.out.println(html);


webDriver.close();
webDriver.quit();
}
}

下载最新版本的 Chrome 驱动程序并使用以下代码:

System.setProperty("webdriver.chrome.driver", "path of chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
Thread.sleep(10000);
driver.get("http://stackoverflow.com");
    

如果在 macOS 计算机上使用 自酿的,可以使用以下命令:

brew tap homebrew/cask && brew cask install chromedriver

在没有其他配置的情况下,它应该可以正常工作。

以上所有答案都是正确的。下面是对这个问题和解决方案的深入探讨。

例如,Selenium 中的驱动程序构造函数

WebDriver driver = new ChromeDriver();

搜索驱动程序可执行文件,在这种情况下,Google Chrome 驱动程序搜索一个 Chrome 驱动程序可执行文件。如果服务无法找到可执行文件,则引发异常。

这就是异常的来源(注意 check state 方法)

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

下面是引发异常的 check state 方法:

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

解决方案 : 在创建驱动程序对象之前设置 system 属性,如下所示。

System.setProperty("webdriver.gecko.driver", "path/to/chromedriver.exe");
WebDriver driver = new ChromeDriver();

下面是驱动程序服务搜索驱动程序可执行文件的代码片段(针对 Chrome 和 Firefox) :

Chrome:

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

火狐:

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

其中 CHROME _ DRIVER _ EXE _ PROPERTY = “ webdriver.CHROME.Driver” 和 GECKO _ DRIVER _ EXE _ PROPERTY = “ webdriver.GECKO.Driver”

其他浏览器也是如此,下面是可用浏览器实现列表的快照:

Enter image description here

在 Ubuntu 上,你可以简单地安装 chromium-chromedriver包:

apt install chromium-chromedriver

请注意,这也安装了一个过时的 Selenium 版本:

pip install selenium

要在 Chrome 中运行 Selenium WebDriver 测试用例,请遵循以下步骤:

  1. 首先,设置属性和 Chrome 驱动程序路径:

    System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
    
  2. 初始化 Chrome 驱动程序的对象:

    WebDriver driver = new ChromeDriver();
    
  3. 将 URL 传递到 WebDriver 的 get方法中:

    driver.get("http://www.google.com");
    

我将二进制文件包含在我的项目资源目录中,如下所示:

src\main\resources\chrome\chromedriver_win32.zip
src\main\resources\chrome\chromedriver_mac64.zip
src\main\resources\chrome\chromedriver_linux64.zip

密码:

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.SystemUtils;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;


import java.io.*;
import java.nio.file.Files;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;


public WebDriver getWebDriver() throws IOException {
File tempDir = Files.createTempDirectory("chromedriver").toFile();
tempDir.deleteOnExit();
File chromeDriverExecutable;


final String zipResource;
if (SystemUtils.IS_OS_WINDOWS) {
zipResource = "chromedriver_win32.zip";
} else if (SystemUtils.IS_OS_LINUX) {
zipResource = "chromedriver_linux64.zip";
} else if (SystemUtils.IS_OS_MAC) {
zipResource = "chrome/chromedriver_mac64.zip";
} else {
throw new RuntimeException("Unsuppoerted OS");
}


try (InputStream is = getClass().getResourceAsStream("/chrome/" + zipResource)) {
try (ZipInputStream zis = new ZipInputStream(is)) {
ZipEntry entry;
entry = zis.getNextEntry();
chromeDriverExecutable = new File(tempDir, entry.getName());
chromeDriverExecutable.deleteOnExit();
try (OutputStream out = new FileOutputStream(chromeDriverExecutable)) {
IOUtils.copy(zis, out);
}
}
}


System.setProperty("webdriver.chrome.driver", chromeDriverExecutable.getAbsolutePath());
return new ChromeDriver();
}