java - Selenium Java : How to get current ChromeDriver instance's user directory and version using ChromeCapabilities

标签 java selenium selenium-webdriver webdriver selenium-chromedriver

我想从我当前运行的 ChromeDriver 中了解以下信息:

  • ChromeDriver 默认创建的临时用户数据文件夹
  • 驱动程序版本

    根据this页面,它应该是 ChromeDriver 返回功能的一部分:enter image description here

    到目前为止我尝试过的:

    Capabilities caps = DesiredCapabilities.chrome();
    System.out.println(caps.getCapability("userDataDir"));
    System.out.println(caps.getCapability("chrome.chromedriverVersion"));
    

    两者都给我空。我确实知道我没有手动设置 ChromeOptions“--user-data-dir”,但我仍然知道 ChromeDriver 默认情况下会使用某个目录。

    版本也是如此,我们可以随意检索当前驱动程序的版本,对吗?

    我在这里缺少什么?

    提前致谢!

    更新1:
    我在将 caps 实例作为参数传递给 ChromeDriver 构造函数之前调用上面的代码。

    这是一个更具洞察力的片段:

    public class Driver implements WebDriver {
    
       private WebDriver webDriver;
       private Capabilities caps;
    
       public Driver(){
          caps = DesiredCapabilities.chrome();
          caps.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
          caps.setCapability(CapabilityType.SUPPORTS_APPLICATION_CACHE, true);
          caps.setCapability(CapabilityType.SUPPORTS_ALERTS, true);
          caps.setCapability(CapabilityType.SUPPORTS_FINDING_BY_CSS, true);
    
          //Am I not doing this correctly?
          System.out.println(caps.getCapability("userDataDir"));
          System.out.println(caps.getCapability("chrome.chromedriverVersion"));
    
          webDriver = new ChromeDriver(caps);
       }
    }
    

    更新2: 关于版本号,我意识到每当我这样做

    Capabilities caps = DesiredCapabilities.chrome();
    

    DesiredCapability 类正在将空白字符串作为参数传递给版本号。

    enter image description here
    enter image description here

    话虽如此,有什么方法可以获取当前的 chrome 驱动程序版本(如下框所示)?我知道这些信息存储在某个地方,但我不知道如何获取它。

    enter image description here

    至于临时用户数据文件夹,即使在查看了功能和创建的 webdriver 对象后,我仍然不知道如何获取它。

    感谢您的帮助!

  • 最佳答案

    感谢 @MikeJRamsey56 的选角技巧,我成功地解决了这个问题。

    这是一个肮脏的(但)有效的解决方案。希望这可以帮助其他人。

    public class Driver implements WebDriver {
    
       private WebDriver webDriver;
       private Capabilities caps;
    
       public Driver(){
          System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, "the/driver/path/chromedriver.exe");
          caps = DesiredCapabilities.chrome();
          webDriver = new ChromeDriver(caps);
    
          //Cast webDriver instance to RemoteWebDriver
          caps = ((RemoteWebDriver) webDriver).getCapabilities();
    
          //Call getCapability and cast to Map. 
          //This line will give a Type Safety warning, hence the "dirty" in my solution.
          Map<String, String> a = (Map<String, String>) caps.getCapability("chrome");
          System.out.println(String.format("Driver Version: %s", a.get("chromedriverVersion")));
          System.out.println(String.format("Temp dir: %s", a.get("userDataDir")));
       }
    }
    

    输出:
    enter image description here

    关于java - Selenium Java : How to get current ChromeDriver instance's user directory and version using ChromeCapabilities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44629016/

    相关文章:

    Selenium 一次多个选项卡

    java - 在java中切片列表

    javascript - 使用 Protractor 将文本输入 Kendo 文本框

    java - 如何从未在 Java 中实例化的类中调用方法?

    java - ArcMenu mainImage 我需要在屏幕底部。 OnMeasure 不让它出现在屏幕底部

    python - 字符串在文本框中输入两次

    java - Selenium,验证字段格式是否正确

    java - 我将如何创建输入命令来执行代码的不同部分? - java

    Java 斐波那契数列计时器

    java - 我们可以将 List<WebElement> 的对象作为参数传递给函数吗?