0

我知道可以通过一种方法获得一些硒功能,其中一个是这样的:

driver.getCapabilities().getBrowserName();

它返回浏览器名称的值。

但是如果它指的是可用的方法,如果我没有误解的话,这似乎与自定义功能有关,我的意思是:

driver.getCapabilities().getCapability("something ?");

返回:值,如果未设置,则返回 null。

获得能力

因此,我尝试编写一个简单的代码来获得我的意思。

    private RemoteWebDriver driver;
    private URL url;
    private DesiredCapabilities dc = new DesiredCapabilities();

    @Before
    public void setUp() throws MalformedURLException {
        url = new URL("http://localhost:4444/wd/hub");
        dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.CHROME);
        //this is custom capability i mean
        dc.setCapability("testName", "Login");
        driver = new RemoteWebDriver(url, dc);
    }
    
    @Test
    public void test() {
        some code.....
    }
    
    @After
    public void tearDown() {
        System.out.println("Browser Name : "+ driver.getCapabilities().getCapability("browserName"));
        System.out.println("Test Name : "+ driver.getCapabilities().getCapability("testName"));
        driver.quit();
    }

随着json,服务器日志说:

Capabilities are: {
  "browserName": "chrome",
  "testName": "Login"
}

服务器日志

但我得到了一个null价值。

如何正确设置?你如何让我们的服务器提供testName我所说的功能?并且可以通过driver.getCapabilities().getCapability("testName");

当前结果 Browser Name : chrome Test Name : null

预期结果 Browser Name : chrome Test Name : Login

谢谢提前

4

2 回答 2

1

您可以使用以下任一解决方案提取WebDriver 功能,例如Browser NameBrowser Version、等:Platform Name

  • 使用直接 API:

    • 代码块:

      System.out.println("Class Name is : "+((RemoteWebDriver) driver).getCapabilities().getClass().toString());
      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());
      
    • 控制台输出:

      Class Name is : class org.openqa.selenium.MutableCapabilities
      Browser Name is : firefox
      Browser Version is : 67.0
      Platform Name is : WINDOWS
      
  • 使用getCapability()

    • 代码块:

      Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
      System.out.println("acceptInsecureCerts value is: "+cap.getCapability("acceptInsecureCerts"));
      System.out.println("Browser Name is : "+cap.getBrowserName());
      System.out.println("Browser version is : "+cap.getVersion());           
      System.out.println("Platform is : "+cap.getPlatform().toString());
      System.out.println("javascriptEnabled value is: "+cap.getCapability("javascriptEnabled"));
      System.out.println("moz:accessibilityChecks value is: "+cap.getCapability("moz:accessibilityChecks"));
      System.out.println("moz:buildID value is: "+cap.getCapability("moz:buildID"));
      System.out.println("geckodriverVersion value is: "+cap.getCapability("geckodriverVersion"));
      System.out.println("Headless Mozilla value is: "+((RemoteWebDriver) driver).getCapabilities().getCapability("moz:headless"));
      System.out.println("moz:headless value is: "+cap.getCapability("moz:headless"));
      System.out.println("Mozilla Profile value is : "+ ((RemoteWebDriver) driver).getCapabilities().getCapability("moz:profile"));
      System.out.println("moz:processID value is : "+cap.getCapability("moz:processID"));
      System.out.println("moz:profile value is : "+cap.getCapability("moz:profile"));
      System.out.println("moz:shutdownTimeout value is : "+cap.getCapability("moz:shutdownTimeout"));
      System.out.println("moz:useNonSpecCompliantPointerOrigin value is : "+cap.getCapability("moz:useNonSpecCompliantPointerOrigin"));
      System.out.println("moz:webdriverClick value is : "+cap.getCapability("moz:webdriverClick"));
      System.out.println("pageLoadStrategy value is : "+cap.getCapability("pageLoadStrategy"));
      System.out.println("Platform is : "+cap.getPlatform().toString());
      System.out.println("platformName value is : "+cap.getCapability("platformName"));
      System.out.println("platformVersion value is : "+cap.getCapability("platformVersion"));
      System.out.println("rotatable value is : "+cap.getCapability("rotatable"));
      System.out.println("setWindowRect value is : "+cap.getCapability("setWindowRect"));
      System.out.println("strictFileInteractability value is : "+cap.getCapability("strictFileInteractability"));
      System.out.println("timeouts values are : "+cap.getCapability("timeouts"));
      System.out.println("unhandledPromptBehavior value is : "+cap.getCapability("unhandledPromptBehavior"));
      
    • 控制台输出:

      acceptInsecureCerts value is: true
      Browser Name is : firefox
      Browser version is : 67.0
      Platform is : WINDOWS
      javascriptEnabled value is: true
      moz:accessibilityChecks value is: false
      moz:buildID value is: 20190516215225
      geckodriverVersion value is: null
      Headless Mozilla value is: false
      moz:headless value is: false
      Mozilla Profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
      moz:processID value is : 7308
      moz:profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
      moz:shutdownTimeout value is : 60000
      moz:useNonSpecCompliantPointerOrigin value is : false
      moz:webdriverClick value is : true
      pageLoadStrategy value is : normal
      Platform is : WINDOWS
      platformName value is : WINDOWS
      platformVersion value is : 6.2
      rotatable value is : false
      setWindowRect value is : true
      strictFileInteractability value is : false
      timeouts values are : {implicit=0, pageLoad=300000, script=30000}
      unhandledPromptBehavior value is : dismiss and notify
      

您可以在WebDriver W3C Recommendation的Capabilities部分中找到支持的功能列表

于 2019-08-05T10:43:08.243 回答
1

听起来您正在寻找的是如何将自定义功能添加到您的 Grid 配置中。这是可能的,但需要几个步骤。

首先,您需要构建一个能力匹配器。匹配器将是它自己的项目,将 Selenium-Server 和 Selenium-Java 库作为依赖项导入。您将需要一个扩展类org.openqa.grid.internal.utils.DefaultCapabilityMatcher,并用您自己的逻辑覆盖该matches()方法以确定节点是否具有所需的功能。完成后,您将构建此项目并生成一个 jar 文件。

其次,您需要将新的匹配器附加到您的 Grid Hub。我将匹配器 jar 存储在与 selenium-server-standalone jar 相同的目录中,并且我更改了正常的启动命令以适应匹配器。

java -cp <custom-matcher>-1.0.0.jar;selenium-server-standalone-3.141.59.jar org.openqa.grid.selenium.GridLauncher -role hub -hubConfig hubConfig.json

在我的hubConfig.json中,我必须在 JSON 中添加两行以连接到匹配器:

  "capabilityMatcher": "fully.qualified.path.to.Matcher",
  "throwOnCapabilityNotPresent": true,

第三,您需要配置节点以接受新功能。如果您还使用 JSON 来配置您的节点,那么就像为您的功能添加新行一样简单:

"capabilityName": "foo"

差不多就是这样。还值得注意的是,它DesiredCapabilities确实具有称为 的功能applicationName,它保留为用户可定义的值。根据您的特定用例,您可能可以利用此功能来代替添加新内容。

不久前,当我自己学习这个过程时,我在 Github 上找到了一个示例 repo 。这是一个基本设置,但它很好地说明了上述步骤。它应该为您自己的实现提供一个很好的起点。

于 2019-08-09T14:30:47.680 回答