Skip to content

[grid] Remove browserName capability from stereotype and SlotMatcher when using Relay Node to test a mobile application #15537

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: trunk
Choose a base branch
from

Conversation

VietND96
Copy link
Member

@VietND96 VietND96 commented Mar 31, 2025

User description

Thanks for contributing to Selenium!
A PR well described will help maintainers to quickly review and merge it

Before submitting your PR, please check our contributing guidelines.
Avoid large PRs, help reviewers by making them as simple and short as possible.

Motivation and Context

The fix in PR #14247 looks like not work.
In this fix, try to make logic in DefaultSlotMatcher and RelaySessionFactory to be same. Since before coming to RelaySessionFactory.test(), a basic match of W3C caps has already been done (in DefaultSlotMatcher).

Besides unit tests, here is the end2end tests

Relay Node config

[node]
session-timeout = 300
override-max-sessions = true
detect-drivers = false
drain-after-session-count = 0

[relay]
url = "http://localhost:4723"
status-endpoint = "/status"
protocol-version = "HTTP/1.1"
configs = [
    '1', '{"platformName":"Android", "appium:platformVersion":"14", "appium:automationName": "uiautomator2", "myApp:version":"beta", "myApp:publish":"public"}',
    '1', '{"browserName":"chrome", "platformName":"Android", "appium:platformVersion":"15", "appium:automationName": "uiautomator2", "myApp:version":"beta", "myApp:publish":"public"}'
]
  • 1 slot capabilities can take request for native app only (appium:platformVersion 14)
  • 1 slot capabilities can take both request for hybrid browser and native app (appium:platformVersion 15)

This code for native app can be reached 2 slots

options = ChromeOptions()
options.set_capability("platformName", "Android")
platform_version = random.choice(["14", "15"])
options.set_capability("appium:platformVersion", platform_version)
options.set_capability("appium:automationName", "uiautomator2")
options.set_capability("appium:app", "https://github.com/saucelabs/my-demo-app-android/releases/download/2.2.0/mda-2.2.0-25.apk")
options.set_capability("appium:appPackage", "com.saucelabs.mydemoapp.android")
options.set_capability("appium:appWaitActivity", "*")
driver = webdriver.Remote(
        command_executor='http://localhost:4444',
        options=options
    )

And this code for hybrid browser session, which can be reached 1st slot (platformVersion 14), where browserName is set in Node stereotype.

options = ChromeOptions()
options.set_capability("platformName", "Android")
options.set_capability("appium:platformVersion", "15")
options.set_capability("appium:automationName", "uiautomator2")
driver = webdriver.Remote(
        command_executor='http://localhost:4444',
        options=options
    )
driver.get('http://google.com')
print(driver.title)

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • I have read the contributing document.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

PR Type

Bug fix, Tests


Description

  • Enhanced DefaultSlotMatcher to handle hybrid browser and native app sessions.

  • Added logic to filter conflicting capabilities in RelaySessionFactory.

  • Introduced new test cases for relay node matching and capability filtering.

  • Updated Bazel build configuration to include Mockito dependency.


Changes walkthrough 📝

Relevant files
Enhancement
DefaultSlotMatcher.java
Enhanced SlotMatcher for Appium and hybrid session handling

java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java

  • Added specific relay capabilities for Appium server.
  • Refactored matching logic for browser, platform, and version.
  • Introduced specificRelayCapabilitiesAppMatch for Appium-related
    capabilities.
  • Improved method naming and modularized matching logic.
  • +57/-24 
    RelaySessionFactory.java
    Added capability filtering in RelaySessionFactory               

    java/src/org/openqa/selenium/grid/node/relay/RelaySessionFactory.java

  • Added filterRelayCapabilities to handle conflicting capabilities.
  • Integrated capability filtering into session creation logic.
  • Removed redundant capability filtering logic.
  • +16/-10 
    Tests
    DefaultSlotMatcherTest.java
    Added tests for DefaultSlotMatcher enhancements                   

    java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.java

  • Added tests for Appium-specific relay capabilities matching.
  • Tested relay node matching with and without browserName.
  • Validated non-W3C compliant platform version handling.
  • +123/-0 
    RelaySessionFactoryTest.java
    Added tests for RelaySessionFactory capability filtering 

    java/test/org/openqa/selenium/grid/node/relay/RelaySessionFactoryTest.java

  • Added unit tests for filterRelayCapabilities method.
  • Validated browserName removal for Appium-related capabilities.
  • +72/-0   
    Configuration changes
    BUILD.bazel
    Updated Bazel build for Mockito dependency                             

    java/test/org/openqa/selenium/grid/node/relay/BUILD.bazel

    • Added Mockito dependency for RelaySessionFactory tests.
    +1/-0     

    Need help?
  • Type /help how to ... in the comments thread for any questions about Qodo Merge usage.
  • Check out the documentation for more information.
  • …d browser and native app
    
    Signed-off-by: Viet Nguyen Duc <[email protected]>
    Copy link
    Contributor

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
    🧪 PR contains tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Logic Consistency

    The browserNameMatch and browserVersionMatch methods both call specificRelayCapabilitiesAppMatch, but they handle the result differently. This could lead to inconsistent matching behavior between browser name and version.

    private boolean browserNameMatch(Capabilities stereotype, Capabilities capabilities) {
      return (capabilities.getBrowserName() == null || capabilities.getBrowserName().isEmpty())
          || Objects.equals(stereotype.getBrowserName(), capabilities.getBrowserName())
          || specificRelayCapabilitiesAppMatch(capabilities);
    }
    
    private boolean browserVersionMatch(String stereotype, String capabilities) {
      return new SemanticVersionComparator().compare(stereotype, capabilities) == 0;
    }
    
    private boolean browserVersionMatch(Capabilities stereotype, Capabilities capabilities) {
      return (capabilities.getBrowserVersion() == null
              || capabilities.getBrowserVersion().isEmpty()
              || Objects.equals(capabilities.getBrowserVersion(), "stable"))
          || browserVersionMatch(stereotype.getBrowserVersion(), capabilities.getBrowserVersion())
          || specificRelayCapabilitiesAppMatch(capabilities);
    }
    Capability Merging

    The old code merged capabilities with filtered stereotype, but the new code only filters capabilities without merging. This might cause different behavior if the stereotype had additional capabilities that should be included.

    public Capabilities filterRelayCapabilities(Capabilities capabilities) {
      /*
      Remove browserName capability if 'appium:app' (or similar based on driver) is present as it breaks appium tests when app is provided
      they are mutually exclusive
      */
      if (specificRelayCapabilitiesAppMatch(capabilities)) {
        MutableCapabilities filteredStereotype = new MutableCapabilities(capabilities);
        filteredStereotype.setCapability(CapabilityType.BROWSER_NAME, (String) null);
        return filteredStereotype;
      }
      return capabilities;
    }
    
    @Override
    public Either<WebDriverException, ActiveSession> apply(CreateSessionRequest sessionRequest) {
      Capabilities capabilities = sessionRequest.getDesiredCapabilities();
      capabilities = filterRelayCapabilities(capabilities);

    Copy link

    @Copilot Copilot AI left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Pull Request Overview

    This PR improves the handling of relay sessions for Appium by refining capability matching and filtering logic in both DefaultSlotMatcher and RelaySessionFactory. Key changes include:

    • Enhancements to DefaultSlotMatcher to incorporate Appium-specific capabilities.
    • Integration of capability filtering in RelaySessionFactory to remove conflicting browserName settings.
    • Addition of comprehensive test cases to validate both new matching and filtering behavior, along with an update to the Bazel build configuration for Mockito.

    Reviewed Changes

    Copilot reviewed 4 out of 5 changed files in this pull request and generated no comments.

    Show a summary per file
    File Description
    java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java Enhanced matching logic for Appium-specific relay capabilities
    java/src/org/openqa/selenium/grid/node/relay/RelaySessionFactory.java Added filtering logic to remove conflicting browserName settings
    java/test/org/openqa/selenium/grid/node/relay/RelaySessionFactoryTest.java Added unit tests for capability filtering behavior
    java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.java Added unit tests for new slot matching scenarios
    java/test/org/openqa/selenium/grid/node/relay/BUILD.bazel Updated build configuration to include the Mockito dependency
    Files not reviewed (1)
    • java/test/org/openqa/selenium/grid/node/relay/BUILD.bazel: Language not supported
    Comments suppressed due to low confidence (1)

    java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java:178

    • [nitpick] There are two overloaded methods named 'browserVersionMatch' (one accepting strings and one accepting Capabilities). Consider renaming one of them for better clarity of intent.
    private boolean browserVersionMatch(String stereotype, String capabilities) {
    

    Copy link
    Contributor

    qodo-merge-pro bot commented Mar 31, 2025

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Fix incorrect browserName matching
    Suggestion Impact:The commit completely restructured the matching logic, including the browserNameMatch function. The browserNameMatch function was inlined directly into the match method (lines 18-21), and while the implementation doesn't exactly match the suggestion, it addresses the same issue by restructuring how browser name matching works.

    code diff:

    +    boolean browserNameMatch =
    +        (capabilities.getBrowserName() == null || capabilities.getBrowserName().isEmpty())
    +            || Objects.equals(stereotype.getBrowserName(), capabilities.getBrowserName())
    +            || specificRelayCapabilitiesAppMatch(capabilities);

    The current implementation of browserNameMatch has a logical issue. When
    specificRelayCapabilitiesAppMatch returns true, it will always match regardless
    of the stereotype's browserName, which could lead to incorrect matching. The
    method should consider the stereotype's browserName value when making this
    decision.

    java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java [172-176]

     private boolean browserNameMatch(Capabilities stereotype, Capabilities capabilities) {
       return (capabilities.getBrowserName() == null || capabilities.getBrowserName().isEmpty())
           || Objects.equals(stereotype.getBrowserName(), capabilities.getBrowserName())
    -      || specificRelayCapabilitiesAppMatch(capabilities);
    +      || (specificRelayCapabilitiesAppMatch(capabilities) && 
    +          (stereotype.getBrowserName() == null || stereotype.getBrowserName().isEmpty()));
     }

    [Suggestion has been applied]

    Suggestion importance[1-10]: 9

    __

    Why: The current implementation has a critical logical flaw that could lead to incorrect matching. It unconditionally returns true when specificRelayCapabilitiesAppMatch is true, regardless of stereotype's browserName. The fix ensures proper matching by considering the stereotype's browserName value, preventing potential mismatches in Appium sessions.

    High
    Fix incorrect browserVersion matching
    Suggestion Impact:The commit completely refactored the matching logic, including the browserVersionMatch method. The browserVersionMatch method was inlined directly into the matches method (lines 22-27), and it still includes the specificRelayCapabilitiesAppMatch condition without the suggested check for stereotype.getBrowserVersion(). However, the overall refactoring addresses the matching logic differently.

    code diff:

    +    boolean browserVersionMatch =
    +        (capabilities.getBrowserVersion() == null
    +                || capabilities.getBrowserVersion().isEmpty()
    +                || Objects.equals(capabilities.getBrowserVersion(), "stable"))
    +            || browserVersionMatch(stereotype.getBrowserVersion(), capabilities.getBrowserVersion())
    +            || specificRelayCapabilitiesAppMatch(capabilities);

    Similar to the browserNameMatch issue, the browserVersionMatch method
    unconditionally returns true when specificRelayCapabilitiesAppMatch is true,
    regardless of the stereotype's browserVersion. This could lead to incorrect
    matching when the stereotype has a specific browserVersion requirement.

    java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java [182-188]

     private boolean browserVersionMatch(Capabilities stereotype, Capabilities capabilities) {
       return (capabilities.getBrowserVersion() == null
               || capabilities.getBrowserVersion().isEmpty()
               || Objects.equals(capabilities.getBrowserVersion(), "stable"))
           || browserVersionMatch(stereotype.getBrowserVersion(), capabilities.getBrowserVersion())
    -      || specificRelayCapabilitiesAppMatch(capabilities);
    +      || (specificRelayCapabilitiesAppMatch(capabilities) && 
    +          (stereotype.getBrowserVersion() == null || stereotype.getBrowserVersion().isEmpty()));
     }

    [Suggestion has been applied]

    Suggestion importance[1-10]: 9

    __

    Why: Similar to the first issue, this method has a critical logical flaw that could lead to incorrect matching. It unconditionally returns true when specificRelayCapabilitiesAppMatch is true, regardless of stereotype's browserVersion. The fix ensures proper matching by considering the stereotype's browserVersion value.

    High
    Learned
    best practice
    Add null check for stereotype browser name before comparison to prevent potential null reference issues

    The browserNameMatch method doesn't properly handle the case where
    stereotype.getBrowserName() might be null. If stereotype.getBrowserName() is
    null but capabilities.getBrowserName() is not null or empty, the
    Objects.equals() comparison could lead to unexpected behavior. Use a more
    defensive approach by checking if the stereotype's browser name is null before
    comparing.

    java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java [172-176]

     private boolean browserNameMatch(Capabilities stereotype, Capabilities capabilities) {
       return (capabilities.getBrowserName() == null || capabilities.getBrowserName().isEmpty())
    -      || Objects.equals(stereotype.getBrowserName(), capabilities.getBrowserName())
    +      || (stereotype.getBrowserName() != null && Objects.equals(stereotype.getBrowserName(), capabilities.getBrowserName()))
           || specificRelayCapabilitiesAppMatch(capabilities);
     }
    • Apply this suggestion
    Suggestion importance[1-10]: 6
    Low
    General
    Improve variable naming clarity

    The method creates a new MutableCapabilities object named filteredStereotype
    which is confusing since it's not actually related to a stereotype but rather a
    filtered version of the input capabilities. This naming could lead to confusion
    and maintenance issues.

    java/src/org/openqa/selenium/grid/node/relay/RelaySessionFactory.java [143-154]

     public Capabilities filterRelayCapabilities(Capabilities capabilities) {
       /*
       Remove browserName capability if 'appium:app' (or similar based on driver) is present as it breaks appium tests when app is provided
       they are mutually exclusive
       */
       if (specificRelayCapabilitiesAppMatch(capabilities)) {
    -    MutableCapabilities filteredStereotype = new MutableCapabilities(capabilities);
    -    filteredStereotype.setCapability(CapabilityType.BROWSER_NAME, (String) null);
    -    return filteredStereotype;
    +    MutableCapabilities filteredCapabilities = new MutableCapabilities(capabilities);
    +    filteredCapabilities.setCapability(CapabilityType.BROWSER_NAME, (String) null);
    +    return filteredCapabilities;
       }
       return capabilities;
     }
    • Apply this suggestion
    Suggestion importance[1-10]: 4

    __

    Why: The variable name 'filteredStereotype' is misleading as it's actually a filtered version of the input capabilities, not a stereotype. Renaming to 'filteredCapabilities' improves code clarity and maintainability, though this is a relatively minor improvement.

    Low
    • Update

    Copy link
    Contributor

    qodo-merge-pro bot commented Mar 31, 2025

    CI Feedback 🧐

    (Feedback updated until commit b56648b)

    A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

    Action: Test / All RBE tests

    Failed stage: Run Bazel [❌]

    Failed test name: Selenium::WebDriver::Firefox::Driver accepts provided Options as sole parameter

    Failure summary:

    The action failed because the Ruby test Selenium::WebDriver::Firefox::Driver accepts provided
    Options as sole parameter failed. The test is located in
    rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:76.

    The specific error was a WebMock::NetConnectNotAllowedError which indicates that the test tried to
    make a real HTTP connection, but WebMock (a HTTP mocking library) had disabled real connections. The
    error message shows that an unregistered POST request was attempted during the test.

    The error occurred in the Firefox driver initialization when it tried to create a session but the
    HTTP request wasn't properly mocked in the test.

    Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    945:  Package 'php-sql-formatter' is not installed, so not removed
    946:  Package 'php8.3-ssh2' is not installed, so not removed
    947:  Package 'php-ssh2-all-dev' is not installed, so not removed
    948:  Package 'php8.3-stomp' is not installed, so not removed
    949:  Package 'php-stomp-all-dev' is not installed, so not removed
    950:  Package 'php-swiftmailer' is not installed, so not removed
    951:  Package 'php-symfony' is not installed, so not removed
    952:  Package 'php-symfony-asset' is not installed, so not removed
    953:  Package 'php-symfony-asset-mapper' is not installed, so not removed
    954:  Package 'php-symfony-browser-kit' is not installed, so not removed
    955:  Package 'php-symfony-clock' is not installed, so not removed
    956:  Package 'php-symfony-debug-bundle' is not installed, so not removed
    957:  Package 'php-symfony-doctrine-bridge' is not installed, so not removed
    958:  Package 'php-symfony-dom-crawler' is not installed, so not removed
    959:  Package 'php-symfony-dotenv' is not installed, so not removed
    960:  Package 'php-symfony-error-handler' is not installed, so not removed
    961:  Package 'php-symfony-event-dispatcher' is not installed, so not removed
    ...
    
    1139:  Package 'php-twig-html-extra' is not installed, so not removed
    1140:  Package 'php-twig-i18n-extension' is not installed, so not removed
    1141:  Package 'php-twig-inky-extra' is not installed, so not removed
    1142:  Package 'php-twig-intl-extra' is not installed, so not removed
    1143:  Package 'php-twig-markdown-extra' is not installed, so not removed
    1144:  Package 'php-twig-string-extra' is not installed, so not removed
    1145:  Package 'php8.3-uopz' is not installed, so not removed
    1146:  Package 'php-uopz-all-dev' is not installed, so not removed
    1147:  Package 'php8.3-uploadprogress' is not installed, so not removed
    1148:  Package 'php-uploadprogress-all-dev' is not installed, so not removed
    1149:  Package 'php8.3-uuid' is not installed, so not removed
    1150:  Package 'php-uuid-all-dev' is not installed, so not removed
    1151:  Package 'php-validate' is not installed, so not removed
    1152:  Package 'php-vlucas-phpdotenv' is not installed, so not removed
    1153:  Package 'php-voku-portable-ascii' is not installed, so not removed
    1154:  Package 'php-wmerrors' is not installed, so not removed
    1155:  Package 'php-xdebug-all-dev' is not installed, so not removed
    ...
    
    2036:  Please ensure that your Gemfiles and .gemspecs are suitably restrictive
    2037:  to avoid an unexpected breakage when 3.0 is released (e.g. ~> 2.3.0).
    2038:  See https://github.com/rubyzip/rubyzip for details. The Changelog also
    2039:  lists other enhancements and bugfixes that have been implemented since
    2040:  version 2.3.0.
    2041:  2 installed gems you directly depend on are looking for funding.
    2042:  Run `bundle fund` for details
    2043:  (12:42:27) �[32mINFO: �[0mFrom Compiling src/google/protobuf/compiler/rust/relative_path.cc [for tool]:
    2044:  external/protobuf+/src/google/protobuf/compiler/rust/relative_path.cc: In member function ‘std::string google::protobuf::compiler::rust::RelativePath::Relative(const google::protobuf::compiler::rust::RelativePath&) const’:
    2045:  external/protobuf+/src/google/protobuf/compiler/rust/relative_path.cc:65:21: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<absl::lts_20240116::string_view>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
    2046:  65 |   for (int i = 0; i < current_segments.size(); ++i) {
    2047:  |                   ~~^~~~~~~~~~~~~~~~~~~~~~~~~
    2048:  (12:42:30) �[32mAnalyzing:�[0m 2282 targets (1652 packages loaded, 61943 targets configured)
    2049:  �[32m[4,835 / 5,673]�[0m 40 / 659 tests;�[0m Testing //java/test/org/openqa/selenium/grid/config:AnnotatedConfigTest-spotbugs; 0s remote, remote-cache ... (48 actions, 8 running)
    2050:  (12:42:31) �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (70 source files):
    2051:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2052:  private final ErrorCodes errorCodes;
    2053:  ^
    2054:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2055:  this.errorCodes = new ErrorCodes();
    2056:  ^
    2057:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2058:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    2059:  ^
    2060:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2061:  ErrorCodes errorCodes = new ErrorCodes();
    2062:  ^
    2063:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2064:  ErrorCodes errorCodes = new ErrorCodes();
    2065:  ^
    2066:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2067:  response.setStatus(ErrorCodes.SUCCESS);
    2068:  ^
    2069:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2070:  response.setState(ErrorCodes.SUCCESS_STRING);
    2071:  ^
    2072:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2073:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    2074:  ^
    2075:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2076:  new ErrorCodes().getExceptionType((String) rawError);
    2077:  ^
    2078:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2079:  private final ErrorCodes errorCodes = new ErrorCodes();
    2080:  ^
    2081:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2082:  private final ErrorCodes errorCodes = new ErrorCodes();
    2083:  ^
    2084:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:55: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2085:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    2086:  ^
    2087:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:101: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2088:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2089:  ^
    2090:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:103: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2091:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2092:  ^
    2093:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:117: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2094:  response.setStatus(ErrorCodes.SUCCESS);
    2095:  ^
    2096:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:118: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2097:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2098:  ^
    2099:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:124: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2100:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2101:  ^
    2102:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2103:  private final ErrorCodes errorCodes = new ErrorCodes();
    2104:  ^
    2105:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2106:  private final ErrorCodes errorCodes = new ErrorCodes();
    2107:  ^
    2108:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:93: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2109:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2110:  ^
    2111:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:98: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2112:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2113:  ^
    2114:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:145: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2115:  response.setStatus(ErrorCodes.SUCCESS);
    2116:  ^
    ...
    
    2181:  807 |     for (int i = 0; i < map_fields.size(); ++i) {
    2182:  |                     ~~^~~~~~~~~~~~~~~~~~~
    2183:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/action_test.html -> javascript/atoms/test/action_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2184:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/attribute_test.html -> javascript/atoms/test/attribute_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2185:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/child_locator_test.html -> javascript/atoms/test/child_locator_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2186:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/click_link_test.html -> javascript/atoms/test/click_link_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2187:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/click_submit_test.html -> javascript/atoms/test/click_submit_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2188:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/click_test.html -> javascript/atoms/test/click_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2189:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/clientrect_test.html -> javascript/atoms/test/clientrect_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2190:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/color_test.html -> javascript/atoms/test/color_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2191:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/deps.js -> javascript/atoms/test/deps.js obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2192:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/dom_test.html -> javascript/atoms/test/dom_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2193:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/drag_test.html -> javascript/atoms/test/drag_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2194:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/enabled_test.html -> javascript/atoms/test/enabled_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2195:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/enter_submit_test.html -> javascript/atoms/test/enter_submit_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2196:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/error_test.html -> javascript/atoms/test/error_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2197:  (12:42:35) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:397:19: runfiles symlink javascript/atoms/test/events_test.html -> javascript/atoms/test/events_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    ...
    
    2361:  (12:43:06) �[32mAnalyzing:�[0m 2282 targets (1653 packages loaded, 63420 targets configured)
    2362:  �[32m[8,670 / 9,339]�[0m 131 / 1374 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:manager-firefox-beta-bidi; 4s remote, remote-cache ... (50 actions, 1 running)
    2363:  (12:43:12) �[32mAnalyzing:�[0m 2282 targets (1653 packages loaded, 63508 targets configured)
    2364:  �[32m[8,925 / 10,221]�[0m 142 / 1443 tests;�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:select-chrome; 6s ... (49 actions, 5 running)
    2365:  (12:43:17) �[32mAnalyzing:�[0m 2282 targets (1653 packages loaded, 63588 targets configured)
    2366:  �[32m[9,328 / 10,927]�[0m 153 / 1722 tests;�[0m [Prepa] Testing //rb/spec/unit/selenium/webdriver/common/interactions:pointer_event_prop; 4s ... (50 actions, 1 running)
    2367:  (12:43:22) �[32mAnalyzing:�[0m 2282 targets (1653 packages loaded, 63780 targets configured)
    2368:  �[32m[9,470 / 11,830]�[0m 210 / 2175 tests;�[0m Building java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.jar (1 source file); 4s remote, remote-cache ... (50 actions, 4 running)
    2369:  (12:43:27) �[32mAnalyzing:�[0m 2282 targets (1653 packages loaded, 63832 targets configured)
    2370:  �[32m[9,665 / 11,993]�[0m 287 / 2227 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 8s remote, remote-cache ... (50 actions, 4 running)
    2371:  (12:43:32) �[32mAnalyzing:�[0m 2282 targets (1653 packages loaded, 63918 targets configured)
    2372:  �[32m[9,830 / 12,119]�[0m 361 / 2262 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 13s remote, remote-cache ... (50 actions, 6 running)
    2373:  (12:43:33) �[32mINFO: �[0mAnalyzed 2282 targets (1653 packages loaded, 63941 targets configured).
    2374:  (12:43:37) �[32m[10,265 / 12,400]�[0m 514 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 18s remote, remote-cache ... (48 actions, 4 running)
    2375:  (12:43:42) �[32m[10,912 / 12,834]�[0m 633 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 23s remote, remote-cache ... (50 actions, 4 running)
    2376:  (12:43:47) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/ErrorHandlerTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2377:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:79: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2378:  handler.throwIfResponseFailed(createResponse(ErrorCodes.SUCCESS), 100);
    2379:  ^
    2380:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:85: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2381:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2382:  ^
    2383:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:86: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2384:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2385:  ^
    2386:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:87: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2387:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2388:  ^
    2389:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:88: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2390:  assertThrowsCorrectExceptionType(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2391:  ^
    2392:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:90: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2393:  ErrorCodes.METHOD_NOT_ALLOWED, UnsupportedCommandException.class);
    2394:  ^
    2395:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:92: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2396:  ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2397:  ^
    2398:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:94: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2399:  ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2400:  ^
    2401:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:95: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2402:  assertThrowsCorrectExceptionType(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2403:  ^
    2404:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2405:  Response response = createResponse(ErrorCodes.UNHANDLED_ERROR);
    2406:  ^
    2407:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:120: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2408:  createResponse(ErrorCodes.UNHANDLED_ERROR, "boom"), 123))
    2409:  ^
    2410:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:133: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2411:  createResponse(ErrorCodes.UNHANDLED_ERROR, ImmutableMap.of("message", "boom")),
    2412:  ^
    2413:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:147: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2414:  ErrorCodes.UNHANDLED_ERROR,
    2415:  ^
    2416:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:167: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2417:  ErrorCodes.UNHANDLED_ERROR,
    2418:  ^
    2419:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:193: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2420:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2421:  ^
    2422:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:214: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2423:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2424:  ^
    2425:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:248: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2426:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2427:  ^
    2428:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:280: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2429:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2430:  ^
    2431:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:308: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2432:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2433:  ^
    2434:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:327: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2435:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2436:  ^
    2437:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:355: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2438:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2439:  ^
    2440:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:394: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2441:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2442:  ^
    2443:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:426: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2444:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2445:  ^
    2446:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:435: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2447:  exceptions.put(ErrorCodes.NO_SUCH_SESSION, NoSuchSessionException.class);
    2448:  ^
    2449:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:436: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2450:  exceptions.put(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2451:  ^
    2452:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:437: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2453:  exceptions.put(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2454:  ^
    2455:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:438: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2456:  exceptions.put(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2457:  ^
    2458:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:439: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2459:  exceptions.put(ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2460:  ^
    2461:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:440: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2462:  exceptions.put(ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2463:  ^
    2464:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2465:  exceptions.put(ErrorCodes.UNHANDLED_ERROR, WebDriverException.class);
    2466:  ^
    2467:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:442: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2468:  exceptions.put(ErrorCodes.JAVASCRIPT_ERROR, JavascriptException.class);
    2469:  ^
    2470:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:443: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2471:  exceptions.put(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2472:  ^
    2473:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:444: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2474:  exceptions.put(ErrorCodes.TIMEOUT, TimeoutException.class);
    2475:  ^
    2476:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:445: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2477:  exceptions.put(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2478:  ^
    2479:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:446: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2480:  exceptions.put(ErrorCodes.INVALID_COOKIE_DOMAIN, InvalidCookieDomainException.class);
    2481:  ^
    2482:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:447: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2483:  exceptions.put(ErrorCodes.UNABLE_TO_SET_COOKIE, UnableToSetCookieException.class);
    2484:  ^
    2485:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:448: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2486:  exceptions.put(ErrorCodes.UNEXPECTED_ALERT_PRESENT, UnhandledAlertException.class);
    2487:  ^
    2488:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:449: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2489:  exceptions.put(ErrorCodes.NO_ALERT_PRESENT, NoAlertPresentException.class);
    2490:  ^
    2491:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:450: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2492:  exceptions.put(ErrorCodes.ASYNC_SCRIPT_TIMEOUT, ScriptTimeoutException.class);
    2493:  ^
    2494:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:451: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2495:  exceptions.put(ErrorCodes.INVALID_SELECTOR_ERROR, InvalidSelectorException.class);
    2496:  ^
    2497:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:452: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2498:  exceptions.put(ErrorCodes.SESSION_NOT_CREATED, SessionNotCreatedException.class);
    2499:  ^
    2500:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:453: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2501:  exceptions.put(ErrorCodes.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsException.class);
    2502:  ^
    2503:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2504:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR, InvalidSelectorException.class);
    2505:  ^
    2506:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:455: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2507:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR_RETURN_TYPER, InvalidSelectorException.class);
    2508:  ^
    2509:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:469: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2510:  ? ErrorCodes.INVALID_SELECTOR_ERROR
    2511:  ^
    2512:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:471: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2513:  assertThat(new ErrorCodes().toStatusCode(e)).isEqualTo(expected);
    2514:  ^
    2515:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:483: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2516:  response.setState(new ErrorCodes().toState(status));
    2517:  ^
    2518:  (12:43:47) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.jar (1 source file):
    2519:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:26: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2520:  import static org.openqa.selenium.remote.ErrorCodes.METHOD_NOT_ALLOWED;
    2521:  ^
    2522:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:55: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2523:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.SUCCESS);
    2524:  ^
    2525:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:81: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2526:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2527:  ^
    2528:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2529:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2530:  ^
    2531:  (12:43:47) �[32m[11,861 / 13,441]�[0m 751 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 28s remote, remote-cache ... (49 actions, 7 running)
    2532:  (12:43:49) �[31m�[1mFAIL: �[0m//rb/spec/unit/selenium/webdriver/firefox:driver (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/unit/selenium/webdriver/firefox/driver/test_attempts/attempt_1.log)
    2533:  (12:43:49) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/json/JsonTest.jar (1 source file):
    2534:  java/test/org/openqa/selenium/json/JsonTest.java:430: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2535:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2536:  ^
    2537:  java/test/org/openqa/selenium/json/JsonTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2538:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2539:  ^
    2540:  java/test/org/openqa/selenium/json/JsonTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2541:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(32));
    2542:  ^
    2543:  (12:43:51) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/RemotableByTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2544:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2545:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2546:  ^
    2547:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2548:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2549:  ^
    2550:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2551:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2552:  ^
    2553:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2554:  private final ErrorCodes errorCodes = new ErrorCodes();
    2555:  ^
    2556:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2557:  private final ErrorCodes errorCodes = new ErrorCodes();
    2558:  ^
    2559:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2560:  private final ErrorCodes errorCodes = new ErrorCodes();
    2561:  ^
    2562:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2563:  private final ErrorCodes errorCodes = new ErrorCodes();
    2564:  ^
    2565:  (12:43:52) �[32m[13,052 / 14,173]�[0m 853 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 33s remote, remote-cache ... (49 actions, 12 running)
    2566:  (12:43:53) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/libsmall-tests-test-lib.jar (5 source files) and running annotation processors (AutoServiceProcessor):
    2567:  java/test/org/openqa/selenium/remote/WebDriverFixture.java:170: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2568:  response.setStatus(new ErrorCodes().toStatus(state, Optional.of(400)));
    2569:  ^
    2570:  (12:43:57) �[32m[14,131 / 14,865]�[0m 973 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 38s remote, remote-cache ... (40 actions, 7 running)
    2571:  (12:44:02) �[32m[14,388 / 15,307]�[0m 1023 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 43s remote, remote-cache ... (35 actions, 4 running)
    2572:  (12:44:03) �[32mINFO: �[0mFrom PackageZip javascript/grid-ui/react-zip.jar:
    2573:  /mnt/engflow/worker/work/1/exec/bazel-out/k8-opt-exec-ST-a934f86a68ba/bin/external/rules_pkg+/pkg/private/zip/build_zip.runfiles/rules_python++python+python_3_9_x86_64-unknown-linux-gnu/lib/python3.9/zipfile.py:1522: UserWarning: Duplicate name: 'grid-ui/'
    2574:  return self._open_to_write(zinfo, force_zip64=force_zip64)
    2575:  (12:44:07) �[32m[14,769 / 15,572]�[0m 1181 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 48s remote, remote-cache ... (48 actions, 4 running)
    2576:  (12:44:12) �[32m[15,073 / 15,704]�[0m 1374 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 53s remote, remote-cache ... (50 actions, 5 running)
    2577:  (12:44:17) �[32m[15,298 / 15,714]�[0m 1592 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 58s remote, remote-cache ... (50 actions, 5 running)
    2578:  (12:44:22) �[32m[15,515 / 15,717]�[0m 1805 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 63s remote, remote-cache ... (50 actions, 5 running)
    2579:  (12:44:28) �[32m[15,624 / 15,719]�[0m 1913 / 2282 tests;�[0m Testing //rb/spec/unit/selenium/webdriver/firefox:driver; 68s remote, remote-cache ... (28 actions, 6 running)
    2580:  (12:44:28) �[31m�[1mFAIL: �[0m//rb/spec/unit/selenium/webdriver/firefox:driver (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/unit/selenium/webdriver/firefox/driver/test.log)
    2581:  �[31m�[1mFAILED: �[0m//rb/spec/unit/selenium/webdriver/firefox:driver (Summary)
    2582:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/unit/selenium/webdriver/firefox/driver/test.log
    2583:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/unit/selenium/webdriver/firefox/driver/test_attempts/attempt_1.log
    2584:  (12:44:28) �[32mINFO: �[0mFrom Testing //rb/spec/unit/selenium/webdriver/firefox:driver:
    2585:  ==================== Test output for //rb/spec/unit/selenium/webdriver/firefox:driver:
    2586:  Selenium::WebDriver::Firefox::Driver
    2587:  uses DriverFinder when provided Service without path
    2588:  does not use DriverFinder when provided Service with path
    2589:  does not require any parameters
    2590:  accepts provided Options as sole parameter (FAILED - 1)
    2591:  does not accept Options of the wrong class
    2592:  Failures:
    2593:  1) Selenium::WebDriver::Firefox::Driver accepts provided Options as sole parameter
    2594:  Failure/Error: expect { described_class.new(options: Options.new(**opts)) }.not_to raise_exception
    2595:  expected no Exception, got #<WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: POST ...remote.active-protocols",
    2596:  1,
    2597:  3]]
    2598:  ============================================================> with backtrace:
    2599:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:118:in `response_for'
    2600:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:75:in `request'
    2601:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2602:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2603:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:76:in `create_session'
    2604:  # ./rb/lib/selenium/webdriver/common/driver.rb:325:in `block in create_bridge'
    2605:  # ./rb/lib/selenium/webdriver/common/driver.rb:324:in `create_bridge'
    2606:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    2607:  # ./rb/lib/selenium/webdriver/firefox/driver.rb:41:in `initialize'
    2608:  # ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:87:in `block in Firefox'
    2609:  # ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:87:in `block in Firefox'
    2610:  # ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:87:in `block in Firefox'
    2611:  Finished in 0.5455 seconds (files took 4.28 seconds to load)
    2612:  5 examples, 1 failure
    2613:  Failed examples:
    2614:  rspec ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:76 # Selenium::WebDriver::Firefox::Driver accepts provided Options as sole parameter
    2615:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChBInNEVbStXmoi3I2bHpvtZEgdkZWZhdWx0GiUKIKpAbI7x-R-0Oq3gztdXULRRyZGDyScPQdtlBdTZdwExELwD
    2616:  ================================================================================
    2617:  ==================== Test output for //rb/spec/unit/selenium/webdriver/firefox:driver:
    2618:  Selenium::WebDriver::Firefox::Driver
    2619:  uses DriverFinder when provided Service without path
    2620:  does not use DriverFinder when provided Service with path
    2621:  does not require any parameters
    2622:  accepts provided Options as sole parameter (FAILED - 1)
    2623:  does not accept Options of the wrong class
    2624:  Failures:
    2625:  1) Selenium::WebDriver::Firefox::Driver accepts provided Options as sole parameter
    2626:  Failure/Error: expect { described_class.new(options: Options.new(**opts)) }.not_to raise_exception
    2627:  expected no Exception, got #<WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: POST ...remote.active-protocols",
    2628:  1,
    2629:  3]]
    2630:  ============================================================> with backtrace:
    2631:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:118:in `response_for'
    2632:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:75:in `request'
    2633:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2634:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2635:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:76:in `create_session'
    2636:  # ./rb/lib/selenium/webdriver/common/driver.rb:325:in `block in create_bridge'
    2637:  # ./rb/lib/selenium/webdriver/common/driver.rb:324:in `create_bridge'
    2638:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    2639:  # ./rb/lib/selenium/webdriver/firefox/driver.rb:41:in `initialize'
    2640:  # ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:87:in `block in Firefox'
    2641:  # ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:87:in `block in Firefox'
    2642:  # ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:87:in `block in Firefox'
    2643:  Finished in 0.55345 seconds (files took 4.21 seconds to load)
    2644:  5 examples, 1 failure
    2645:  Failed examples:
    2646:  rspec ./rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb:76 # Selenium::WebDriver::Firefox::Driver accepts provided Options as sole parameter
    2647:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChBInNEVbStXmoi3I2bHpvtZEgdkZWZhdWx0GiUKIKpAbI7x-R-0Oq3gztdXULRRyZGDyScPQdtlBdTZdwExELwD
    2648:  ================================================================================
    2649:  (12:44:34) �[32m[15,631 / 15,723]�[0m 1917 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Building java/test/org/openqa/selenium/grid/distributor/DistributorDrainingTest.jar (1 source file); 19s ... (25 actions, 5 running)
    2650:  (12:44:39) �[32m[15,640 / 15,729]�[0m 1921 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Building java/test/org/openqa/selenium/grid/distributor/local/LocalDistributorTest.jar (1 source file); 25s ... (24 actions, 5 running)
    2651:  (12:44:45) �[32m[15,648 / 15,736]�[0m 1925 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Building java/test/org/openqa/selenium/grid/distributor/HeartBeatTest.jar (1 source file); 30s ... (23 actions, 4 running)
    2652:  (12:44:50) �[32m[15,656 / 15,744]�[0m 1929 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Building java/test/org/openqa/selenium/grid/distributor/selector/DefaultSlotSelectorTest.jar (1 source file); 33s ... (23 actions, 6 running)
    2653:  (12:44:55) �[32m[15,660 / 15,748]�[0m 1931 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //dotnet/test/common:PageLoadingTest-firefox; 34s ... (23 actions, 6 running)
    2654:  (12:45:02) �[32m[15,670 / 15,754]�[0m 1938 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/grid/distributor:DistributorDrainingTest; 21s ... (19 actions, 7 running)
    2655:  (12:45:09) �[32m[15,677 / 15,758]�[0m 1943 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/grid/distributor:DistributorNodeAvailabilityTest; 19s ... (16 actions, 7 running)
    2656:  (12:45:15) �[32m[15,682 / 15,758]�[0m 1947 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/grid/distributor:DistributorTest; 18s ... (12 actions, 6 running)
    2657:  (12:45:20) �[32m[15,686 / 15,758]�[0m 1951 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/sessionqueue/local:LocalNewSessionQueueTest; 21s remote, remote-cache ... (8 actions, 7 running)
    2658:  (12:45:25) �[32m[15,690 / 15,758]�[0m 1954 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/sessionqueue/local:LocalNewSessionQueueTest; 26s remote, remote-cache ... (5 actions, 4 running)
    2659:  (12:45:31) �[32m[15,697 / 15,878]�[0m 1957 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/sessionqueue/local:LocalNewSessionQueueTest; 31s remote, remote-cache ... (49 actions, 6 running)
    2660:  (12:45:36) �[32m[15,700 / 15,930]�[0m 1958 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/edge:EdgeOptionsFunctionalTest-remote; 7s remote, remote-cache ... (49 actions, 6 running)
    2661:  (12:45:45) �[32m[15,702 / 15,947]�[0m 1958 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/edge:EdgeOptionsFunctionalTest-remote; 16s remote, remote-cache ... (50 actions, 6 running)
    2662:  (12:45:50) �[32m[15,702 / 15,947]�[0m 1958 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/edge:EdgeOptionsFunctionalTest-remote; 21s remote, remote-cache ... (50 actions, 7 running)
    2663:  (12:45:56) �[32m[15,705 / 15,947]�[0m 1960 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/edge:EdgeOptionsFunctionalTest-remote; 27s remote, remote-cache ... (50 actions, 7 running)
    2664:  (12:46:05) �[32m[15,706 / 15,947]�[0m 1961 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 35s ... (50 actions, 6 running)
    2665:  (12:46:15) �[32m[15,706 / 15,947]�[0m 1961 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 45s ... (50 actions, 6 running)
    2666:  (12:46:20) �[32m[15,707 / 15,947]�[0m 1962 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/storage:StorageCommandsTest-chrome-remote; 50s remote, remote-cache ... (50 actions, 6 running)
    2667:  (12:46:25) �[32m[15,707 / 15,947]�[0m 1962 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/storage:StorageCommandsTest-chrome-remote; 55s remote, remote-cache ... (50 actions, 7 running)
    2668:  (12:46:33) �[32m[15,709 / 15,947]�[0m 1964 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Building java/test/org/openqa/selenium/grid/distributor/DrainTest-remote.jar (1 source file); 63s ... (50 actions, 7 running)
    2669:  (12:46:40) �[32m[15,710 / 15,948]�[0m 1964 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-remote; 69s ... (50 actions, 8 running)
    2670:  (12:46:45) �[32m[15,711 / 15,949]�[0m 1964 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/interactions:ActionDurationTest-remote; 74s ... (50 actions, 10 running)
    2671:  (12:46:55) �[32m[15,712 / 15,949]�[0m 1965 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/remote:RemoteWebDriverScreenshotTest-firefox-beta-remote; 84s ... (50 actions, 10 running)
    2672:  (12:47:00) �[32m[15,714 / 15,950]�[0m 1966 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/script:ScriptEventsTest-remote; 89s ... (50 actions, 10 running)
    2673:  (12:47:05) �[32m[15,715 / 15,950]�[0m 1967 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/input:DefaultWheelTest-edge-remote; 94s ... (50 actions, 11 running)
    2674:  (12:47:12) �[32m[15,716 / 15,950]�[0m 1968 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/input:DefaultWheelTest-edge-remote; 101s ... (50 actions, 11 running)
    2675:  (12:47:18) �[32m[15,718 / 15,950]�[0m 1970 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/input:CombinedInputActionsTest-remote; 106s ... (50 actions, 11 running)
    2676:  (12:47:25) �[32m[15,720 / 15,950]�[0m 1972 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/script:CallFunctionParameterTest-chrome-remote; 113s ... (50 actions, 10 running)
    2677:  (12:47:30) �[32m[15,721 / 15,950]�[0m 1973 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/script:CallFunctionParameterTest-chrome-remote; 118s ... (50 actions, 10 running)
    2678:  (12:47:38) �[32m[15,721 / 15,950]�[0m 1973 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/browser:BrowserCommandsTest-edge-remote; 126s ... (50 actions, 11 running)
    2679:  (12:47:44) �[32m[15,722 / 15,950]�[0m 1974 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/script:CallFunctionParameterTest-edge-remote; 132s ... (50 actions, 11 running)
    2680:  (12:47:50) �[32m[15,726 / 15,950]�[0m 1978 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/edge:EdgeDriverInfoTest-remote; 138s ... (50 actions, 10 running)
    2681:  (12:47:55) �[32m[15,730 / 15,951]�[0m 1981 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/input:ReleaseCommandTest-chrome-remote; 142s ... (50 actions, 10 running)
    2682:  (12:48:01) �[32m[15,731 / 15,951]�[0m 1982 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-chrome-remote; 147s ... (50 actions, 13 running)
    2683:  (12:48:08) �[32m[15,733 / 15,952]�[0m 1983 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Building java/test/org/openqa/selenium/grid/distributor/DrainTest-edge.jar (1 source file); 154s ... (50 actions, 13 running)
    2684:  (12:48:14) �[32m[15,734 / 15,952]�[0m 1984 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Building java/test/org/openqa/selenium/grid/distributor/DrainTest-edge-remote.jar (1 source file); 158s ... (50 actions, 13 running)
    2685:  (12:48:20) �[32m[15,736 / 15,952]�[0m 1986 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //java/test/org/openqa/selenium/bidi/network:NetworkCommandsTest-remote; 162s ... (50 actions, 14 running)
    2686:  (12:48:26) �[32m[15,740 / 15,954]�[0m 1987 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 128s remote, remote-cache ... (50 actions, 16 running)
    2687:  (12:48:35) �[32m[15,742 / 15,956]�[0m 1988 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 137s remote, remote-cache ... (50 actions, 16 running)
    2688:  (12:48:41) �[32m[15,742 / 15,956]�[0m 1988 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 143s remote, remote-cache ... (50 actions, 17 running)
    2689:  (12:48:47) �[32m[15,745 / 15,956]�[0m 1990 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 149s remote, remote-cache ... (50 actions, 17 running)
    2690:  (12:48:52) �[32m[15,750 / 15,957]�[0m 1995 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 155s remote, remote-cache ... (50 actions, 17 running)
    2691:  (12:48:58) �[32m[15,752 / 15,957]�[0m 1996 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 161s remote, remote-cache ... (50 actions, 17 running)
    2692:  (12:49:03) �[32m[15,757 / 15,958]�[0m 2000 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 166s remote, remote-cache ... (50 actions, 17 running)
    2693:  (12:49:10) �[32m[15,758 / 15,958]�[0m 2001 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 172s remote, remote-cache ... (50 actions, 16 running)
    2694:  (12:49:16) �[32m[15,760 / 15,958]�[0m 2003 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 178s remote, remote-cache ... (50 actions, 17 running)
    2695:  (12:49:22) �[32m[15,763 / 15,958]�[0m 2006 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 184s remote, remote-cache ... (50 actions, 17 running)
    2696:  (12:49:28) �[32m[15,766 / 15,958]�[0m 2009 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 190s remote, remote-cache ... (50 actions, 17 running)
    2697:  (12:49:33) �[32m[15,768 / 15,958]�[0m 2012 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 195s remote, remote-cache ... (50 actions, 18 running)
    2698:  (12:49:38) �[32m[15,774 / 15,958]�[0m 2017 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 201s remote, remote-cache ... (50 actions, 18 running)
    2699:  (12:49:44) �[32m[15,775 / 15,958]�[0m 2017 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 206s remote, remote-cache ... (50 actions, 19 running)
    2700:  (12:49:49) �[32m[15,782 / 15,960]�[0m 2022 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 211s remote, remote-cache ... (50 actions, 18 running)
    2701:  (12:49:55) �[32m[15,785 / 15,962]�[0m 2024 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 217s remote, remote-cache ... (50 actions, 18 running)
    2702:  (12:50:00) �[32m[15,787 / 15,963]�[0m 2025 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 222s remote, remote-cache ... (50 actions, 22 running)
    2703:  (12:50:06) �[32m[15,789 / 15,963]�[0m 2027 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 228s remote, remote-cache ... (50 actions, 25 running)
    2704:  (12:50:11) �[32m[15,789 / 15,963]�[0m 2027 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 233s remote, remote-cache ... (50 actions, 25 running)
    2705:  (12:50:17) �[32m[15,790 / 15,963]�[0m 2028 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 239s remote, remote-cache ... (50 actions, 26 running)
    2706:  (12:50:23) �[32m[15,793 / 15,965]�[0m 2030 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 245s remote, remote-cache ... (50 actions, 26 running)
    2707:  (12:50:30) �[32m[15,797 / 15,965]�[0m 2034 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/network:NetworkCommandsTest-remote; 129s remote, remote-cache ... (50 actions, 27 running)
    2708:  (12:50:36) �[32m[15,801 / 15,965]�[0m 2036 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-chrome-remote; 72s remote, remote-cache ... (50 actions, 29 running)
    2709:  (12:50:41) �[32m[15,806 / 15,967]�[0m 2038 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-chrome-remote; 77s remote, remote-cache ... (50 actions, 29 running)
    2710:  (12:50:47) �[32m[15,807 / 15,967]�[0m 2039 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-chrome-remote; 83s remote, remote-cache ... (50 actions, 32 running)
    2711:  (12:50:52) �[32m[15,813 / 15,969]�[0m 2043 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-chrome-remote; 82s remote, remote-cache ... (50 actions, 33 running)
    2712:  (12:50:58) �[32m[15,815 / 15,969]�[0m 2045 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/storage:StorageCommandsTest-remote; 85s remote, remote-cache ... (50 actions, 35 running)
    2713:  (12:51:03) �[32m[15,824 / 15,970]�[0m 2053 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/storage:StorageCommandsTest-remote; 90s remote, remote-cache ... (50 actions, 36 running)
    2714:  (12:51:08) �[32m[15,830 / 15,972]�[0m 2058 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/storage:StorageCommandsTest-remote; 95s remote, remote-cache ... (50 actions, 35 running)
    2715:  (12:51:14) �[32m[15,844 / 15,978]�[0m 2069 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox-remote; 96s remote, remote-cache ... (50 actions, 30 running)
    2716:  (12:51:20) �[32m[15,845 / 15,978]�[0m 2070 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox-remote; 102s remote, remote-cache ... (50 actions, 32 running)
    2717:  (12:51:25) �[32m[15,849 / 15,979]�[0m 2073 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox-remote; 107s remote, remote-cache ... (50 actions, 32 running)
    2718:  (12:51:30) �[32m[15,849 / 15,979]�[0m 2073 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox-remote; 112s remote, remote-cache ... (50 actions, 34 running)
    2719:  (12:51:36) �[32m[15,855 / 15,982]�[0m 2077 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:LocalValueTest-remote; 72s remote, remote-cache ... (50 actions, 35 running)
    2720:  (12:51:41) �[32m[15,858 / 15,987]�[0m 2077 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:LocalValueTest-remote; 77s remote, remote-cache ... (50 actions, 38 running)
    2721:  (12:51:46) �[32m[15,859 / 15,987]�[0m 2078 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:LocalValueTest-remote; 83s remote, remote-cache ... (50 actions, 38 running)
    2722:  (12:51:51) �[32m[15,861 / 15,987]�[0m 2080 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:LocalValueTest-remote; 88s remote, remote-cache ... (50 actions, 40 running)
    2723:  (12:51:56) �[32m[15,870 / 15,988]�[0m 2088 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:LocalValueTest-remote; 93s remote, remote-cache ... (50 actions, 41 running)
    2724:  (12:52:01) �[32m[15,881 / 15,994]�[0m 2095 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:LocalValueTest-remote; 98s remote, remote-cache ... (50 actions, 36 running)
    2725:  (12:52:07) �[32m[15,888 / 15,996]�[0m 2101 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-edge-remote; 79s remote, remote-cache ... (50 actions, 34 running)
    2726:  (12:52:12) �[32m[15,891 / 15,998]�[0m 2102 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-edge-remote; 85s remote, remote-cache ... (50 actions, 38 running)
    2727:  (12:52:17) �[32m[15,895 / 15,999]�[0m 2105 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-edge-remote; 90s remote, remote-cache ... (50 actions, 37 running)
    2728:  (12:52:23) �[32m[15,898 / 16,000]�[0m 2107 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-edge-remote; 95s remote, remote-cache ... (50 actions, 39 running)
    2729:  (12:52:28) �[32m[15,904 / 16,001]�[0m 2112 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-edge-remote; 100s remote, remote-cache ... (50 actions, 41 running)
    2730:  (12:52:33) �[32m[15,917 / 16,007]�[0m 2120 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-edge-remote; 106s remote, remote-cache ... (50 actions, 39 running)
    2731:  (12:52:38) �[32m[15,927 / 16,010]�[0m 2127 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-edge-remote; 109s remote, remote-cache ... (50 actions, 40 running)
    2732:  (12:52:43) �[32m[15,931 / 16,010]�[0m 2131 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-edge-remote; 114s remote, remote-cache ... (50 actions, 40 running)
    2733:  (12:52:48) �[32m[15,935 / 16,010]�[0m 2135 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome; 99s remote, remote-cache ... (50 actions, 41 running)
    2734:  (12:52:54) �[32m[15,938 / 16,010]�[0m 2138 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-edge; 104s remote, remote-cache ... (50 actions, 45 running)
    2735:  (12:52:59) �[32m[15,948 / 16,010]�[0m 2148 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-edge; 109s remote, remote-cache ... (50 actions, 44 running)
    2736:  (12:53:05) �[32m[15,956 / 16,010]�[0m 2156 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 114s remote, remote-cache ... (50 actions, 43 running)
    2737:  (12:53:10) �[32m[15,961 / 16,010]�[0m 2161 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 119s remote, remote-cache ... (49 actions, 44 running)
    2738:  (12:53:16) �[32m[15,966 / 16,010]�[0m 2166 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 125s remote, remote-cache ... (44 actions running)
    2739:  (12:53:21) �[32m[15,974 / 16,010]�[0m 2174 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 130s remote, remote-cache ... (36 actions running)
    2740:  (12:53:30) �[32m[15,979 / 16,010]�[0m 2180 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 139s remote, remote-cache ... (31 actions running)
    2741:  (12:53:35) �[32m[15,985 / 16,010]�[0m 2185 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 144s remote, remote-cache ... (25 actions running)
    2742:  (12:53:42) �[32m[15,990 / 16,010]�[0m 2190 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 151s remote, remote-cache ... (20 actions running)
    2743:  (12:53:48) �[32m[15,991 / 16,010]�[0m 2192 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 157s remote, remote-cache ... (19 actions running)
    2744:  (12:53:55) �[32m[15,993 / 16,010]�[0m 2193 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 164s remote, remote-cache ... (17 actions running)
    2745:  (12:54:00) �[32m[15,997 / 16,010]�[0m 2197 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 169s remote, remote-cache ... (13 actions running)
    2746:  (12:54:09) �[32m[15,997 / 16,010]�[0m 2197 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 178s remote, remote-cache ... (13 actions running)
    2747:  (12:54:15) �[32m[15,999 / 16,010]�[0m 2199 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 184s remote, remote-cache ... (11 actions running)
    2748:  (12:54:25) �[32m[15,999 / 16,010]�[0m 2199 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 194s remote, remote-cache ... (11 actions running)
    2749:  (12:54:40) �[32m[15,999 / 16,010]�[0m 2200 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 209s remote, remote-cache ... (11 actions running)
    2750:  (12:54:50) �[32m[16,001 / 16,010]�[0m 2201 / 2282 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 219s remote, remote-cache ... (9 actions running)
    2751:  (12:5...

    @VietND96 VietND96 added the B-grid Everything grid and server related label Mar 31, 2025
    @VietND96 VietND96 requested a review from diemol April 6, 2025 20:08
    Comment on lines +53 to +54
    public static final List<String> SPECIFIC_RELAY_CAPABILITIES_APP =
    Arrays.asList("appium:app", "appium:appPackage", "appium:bundleId");
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Why do we need to do a match on these Appium capabilities? Those should be just passed along the session request.
    Maybe I am misunderstanding what this PR is trying to do.

    Copy link
    Member Author

    @VietND96 VietND96 Apr 24, 2025

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    @diemol, I tried to change the PR name to understand better.

    [grid] Remove browserName capability from stereotype and SlotMatcher when using Relay Node to test a mobile application

    To recognise when a Relay Node is used to forward a test for native app or hybrid browser session to Appium, we have to rely on these capabilities.
    Definitely, we don't do a match on these Appium capabilities. The ultimate goal is to check if any capability is present in the request capabilities, we remove browserName from both stereotype (skip browserName match in SlotMatcher), assign to a Relay Node and forward the session to Appium (let Appium launch the native app, instead of launching the browser session there, which is #14247 tried to do).

    @VietND96 VietND96 changed the title [grid] Improve SlotMatcher for Node relay to Appium server with hybrid browser and native app [grid] Remove browserName capability from stereotype and SlotMatcher when using Relay Node Apr 24, 2025
    @VietND96 VietND96 changed the title [grid] Remove browserName capability from stereotype and SlotMatcher when using Relay Node [grid] Remove browserName capability from stereotype and SlotMatcher when using Relay Node to test a mobile application Apr 24, 2025
    @VietND96 VietND96 requested a review from diemol April 24, 2025 12:57
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    B-grid Everything grid and server related Review effort 3/5
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    2 participants