如何使用Selenium WebDriver和Java获取浏览器名称?

时间:2016-02-07 19:33:09

标签: java selenium-webdriver

我有一个测试用例,需要根据浏览器名称执行,即IE或Chrome。在此测试用例中,某些部分将取决于浏览器类型。

如何在执行之间获取浏览器名称?例如,如果它是IE,我需要传递数据。如果是Chrome浏览器,我需要选择数据。

5 个答案:

答案 0 :(得分:24)

您可以使用以下代码了解浏览器名称,版本和操作系统详细信息: -

    Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
    String browserName = cap.getBrowserName().toLowerCase();
    System.out.println(browserName);
    String os = cap.getPlatform().toString();
    System.out.println(os);
    String v = cap.getVersion().toString();
    System.out.println(v);

您需要导入的包

import org.openqa.selenium.Capabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

希望它会对你有所帮助:)。

答案 1 :(得分:3)

在Python中,您可以像这样访问driver.capabilities dict

driver.capabilities['browserName']

https://groups.google.com/forum/#!topic/selenium-users/nbSujBSc6q8

答案 2 :(得分:2)

要检索浏览器名称浏览器版本平台名称,可以使用以下两种方法之一:

  • 直接使用API​​:

    • 代码块:

      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.firefox.FirefoxDriver;
      import org.openqa.selenium.remote.RemoteWebDriver;
      
      public class browserCapabilitiesRetrieve {
      
          public static void main(String[] args) {
      
              // initial configuration
              System.out.println("Browser Name is : "+((RemoteWebDriver) driver).getCapabilities().getBrowserName().toLowerCase());
              System.out.println("Browser Version is : "+((RemoteWebDriver) driver).getCapabilities().getVersion().toString());
              System.out.println("Platform Name is : "+((RemoteWebDriver) driver).getCapabilities().getPlatform().toString());
              driver.quit();
          }
      }
      
  • 使用 Capabilities 对象和getCapability()方法:

    • 代码块:

      import org.openqa.selenium.Capabilities;
      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.firefox.FirefoxDriver;
      import org.openqa.selenium.remote.RemoteWebDriver;
      
      public class FirefoxBrowserCapabilitiesRetrieve_getCapability {
      
          public static void main(String[] args) {
      
              // initial configuration
              Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
              System.out.println("Browser Name is : "+cap.getBrowserName());
              System.out.println("Browser version is : "+cap.getVersion());           
              System.out.println("Platform is : "+cap.getPlatform().toString());
              driver.quit();
          }
      }
      

答案 3 :(得分:1)

您是测试人员,因此您可以编写代码/脚本来明确测试各种浏览器/版本组合及其各种细微差别和细微之处(同时尝试重复使用尽可能的逻辑,尽量减少重复等。)

WebDriver的本质是,,测试人员正在开车 - 而不是浏览器。不要试图发现事情。

因此,对于IE和Chrome,您有不同的行为,您应该为每个(在不同的WebDriver中)明确创建一个@Test实例并设置所需的数据(同样属性,{ {1}}等。视情况而定。

通过各种方式在测试之间共享公共查找代码,但是在测试稳健并且工作之前,您不应该尝试重构它们。

答案 4 :(得分:0)

对于使用C#的用户,可以在使用本地浏览器驱动程序或remotewebdriver时执行以下操作来检测浏览器:

        public static bool IsSafari(IWebDriver driver)
        {
            // Using remotewebdriver e.g. browserstack
            if (SomeConfig.UsingRemoteWebDriver)
                return GetRemoteDriverBrowserName(driver) == "safari";
            // Using local browser driver
            return driver.GetType() == typeof(SafariDriver);
        }

        public static bool IsInternetExplorer(IWebDriver driver)
        {
            // Using remotewebdriver e.g. browserstack
            if (SomeConfig.UsingRemoteWebDriver)
                return GetRemoteDriverBrowserName(driver) == "internet explorer";
            // Using local browser driver
            return driver.GetType() == typeof(InternetExplorerDriver);
        }

        private static string GetRemoteDriverBrowserName(IWebDriver driver)
        {
            return ((RemoteWebDriver)driver).Capabilities.GetCapability("browserName").ToString().ToLower();
        }