【问题标题】:How to run Selenium WebDriver test cases in Chrome如何在 Chrome 中运行 Selenium WebDriver 测试用例
【发布时间】:2012-11-23 08:52:56
【问题描述】:

我试过了

WebDriver driver = new ChromeDriver();

但我得到的错误是

失败的测试:setUp(com.TEST):驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置;有关详细信息,请参阅code here。最新版本可从this link下载

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

【问题讨论】:

  • 如果您知道您是否已从code.google.com/p/chromedriver/downloads/list 下载了 selenium chrome 驱动程序并将其添加到 Eclipse 中的库中的“添加外部罐子”下,然后运行您的 selenium-java 代码,将会很有帮助。

标签: selenium webdriver selenium-webdriver selenium-chromedriver


【解决方案1】:

您需要从以下位置下载可执行驱动程序: ChromeDriver Download

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

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

这是从ChromeDriver Documentation 中最有用的指南中提取的。

【讨论】:

  • @aimbire:嘿,我也面临同样的问题。我做了你建议的同样的事情,但得到了这个错误。 “java.lang.IllegalStateException:驱动程序可执行文件不存在:D:\selenimPRJarg1\chromedriver.exe”我错过了什么吗?
  • 你必须从这里docs.seleniumhq.org/download下载Selenium Standalone Server,并将jar文件作为依赖添加到你的Java项目中。
  • 你在哪里使用/输入这个? System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); WebDriver driver = new ChromeDriver();
  • 我已经探索了这个问题的每一个答案,只有这个对我有用。 (y)
  • 虽然这在技术上是正确的,但您确实不应该在代码中设置该环境变量,这与在代码中硬编码路径相同。环境变量应该在您运行代码的机器上设置,允许每台机器将 chrome 驱动程序可执行文件存储在一个唯一的位置,但一切仍然正常。
【解决方案2】:

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

请同时阅读发行说明here

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

}

【讨论】:

  • 现在这是一个麻烦的解决方案。如果这是你现在使用的,我建议你改变它。
  • 下载链接已过期。
  • 此代码在 Google Chrome 版本 69.0.3497.100 (Official Build) (64-bit) 中不起作用。请兄弟建议新代码。到目前为止,它在低于 65.0.0 版本的旧版本中工作
【解决方案3】:

您应该将 chromeDriver 下载到一个文件夹中,并将此文件夹添加到您的 PATH 环境变量中。

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

【讨论】:

    【解决方案4】:

    如果你在 macOS 机器上使用Homebrew,你可以使用命令:

    brew tap homebrew/cask && brew cask install chromedriver
    

    之后它应该可以正常工作,无需其他配置。

    【讨论】:

    • 现在是brew tap homebrew/cask && brew cask install chromedriver
    【解决方案5】:

    您需要安装 Chrome 驱动程序。您可以使用NuGet 安装此软件包,如下所示:

    【讨论】:

    • 这可能是一个,但 NuGet 上的版本太旧:2.10.0 日期为 2014 年 10 月 13 日
    • 3 月 23 日再次过时。无法在最新的 Chrome 上使用。
    【解决方案6】:

    您可以使用以下代码在 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();
        }
    }
    

    【讨论】:

      【解决方案7】:

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

      您甚至不需要在任何地方指定路径和/或将chromedriver 添加到您的路径等。 我只是在一个干净的 Python 安装上完成了它,并且有效。

      【讨论】:

      • 不好的建议...不要污染你的 python 安装
      • 另外,OP 从未指定 Python
      【解决方案8】:

      下载最新版本的 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");
          
      

      【讨论】:

        【解决方案9】:

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

        apt install chromium-chromedriver
        

        请注意,这也会安装过时的 Selenium 版本。要安装最新的 Selenium:

        pip install selenium
        

        【讨论】:

          【解决方案10】:

          前面的答案都是正确的。以下是对问题和解决方案的深入探讨。

          以 Selenium 中的驱动构造函数为例

          WebDriver driver = new ChromeDriver();
          

          搜索驱动程序可执行文件,在这种情况下,Google Chrome 驱动程序搜索 Chrome 驱动程序可执行文件。如果服务找不到可执行文件,则抛出异常。

          这就是异常的来源(注意检查状态方法)

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

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

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

          以下是驱动服务搜索驱动程序可执行文件的代码 sn-p(适用于 Chrome 和 Firefox):

          铬:

             @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"

          其他浏览器的情况类似,以下是可用浏览器实现列表的快照:

          【讨论】:

            【解决方案11】:

            要在 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");
              

            【讨论】:

              【解决方案12】:

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

              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();
              }
              

              【讨论】:

                【解决方案13】:

                下载chromedriver的EXE文件,解压到当前项目位置。

                这里是链接,我们可以在这里下载最新版本的chromedriver:

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

                【讨论】:

                • 下载chromedriver并解压。接下来在您的项目中创建一个文件夹并将其命名为 chromedriver 并将 .exe 文件保存在其中。并使用此路径。这是简单的代码示例。 '代码' System.setProperty("webdriver.chrome.driver",System.getProperty("user.dir")+"\\chromedriver\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("google.co.in"); WebElement searchbox = driver.findElement(By.name("q")); searchbox.sendKeys("最好的免费硒视频教程"); searchbox.submit();
                • 请考虑使用已评论的附加信息更新此答案。
                猜你喜欢
                • 2023-03-15
                • 1970-01-01
                • 1970-01-01
                • 2017-02-10
                • 2018-11-25
                • 2017-01-11
                • 2012-02-23
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多