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

Merged
merged 12 commits into from
May 2, 2025

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 033ff4d)

    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::ActionBuilder#scroll_by scrolls by given amount

    Failure summary:

    The action failed because the test Selenium::WebDriver::ActionBuilder#scroll_by scrolls by given
    amount in the Ruby integration tests failed. The test expected an element to be in the viewport
    after scrolling, but it wasn't.

    Specifically, the failure occurred at line 332 in
    ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb with the error:

    expected true
    got
    false


    This was testing the Firefox remote driver's scrolling functionality. The test expected that after
    scrolling, a footer element would be visible in the viewport, but it remained outside the viewport.

    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
    ...
    
    1990:  (17:09:02) �[32mAnalyzing:�[0m 2292 targets (1610 packages loaded, 49187 targets configured)
    1991:  �[32m[5,055 / 7,068]�[0m 62 / 684 tests;�[0m Creating source manifest for //rb/spec/unit/selenium/webdriver/remote:capabilities; 0s local ... (7 actions, 3 running)
    1992:  (17:09:03) �[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
    1993:  (17:09:03) �[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
    1994:  (17:09:03) �[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
    1995:  (17:09:03) �[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
    1996:  (17:09:03) �[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
    1997:  (17:09:03) �[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
    1998:  (17:09:03) �[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
    1999:  (17:09:03) �[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
    2000:  (17:09:03) �[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
    2001:  (17:09:03) �[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
    2002:  (17:09:03) �[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
    2003:  (17:09:03) �[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
    2004:  (17:09:03) �[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
    2005:  (17:09:03) �[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
    2006:  (17:09:03) �[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
    ...
    
    2097:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/atoms/inject/nested_iframes.html -> javascript/webdriver/test/atoms/inject/nested_iframes.html obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2098:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/atoms/inject/single_iframe.html -> javascript/webdriver/test/atoms/inject/single_iframe.html obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2099:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/atoms/inject/sql_database_test.html -> javascript/webdriver/test/atoms/inject/sql_database_test.html obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2100:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/atoms/kitten.jpg -> javascript/webdriver/test/atoms/kitten.jpg obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2101:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/atoms/storage/local_storage_test.html -> javascript/webdriver/test/atoms/storage/local_storage_test.html obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2102:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/atoms/storage/session_storage_test.html -> javascript/webdriver/test/atoms/storage/session_storage_test.html obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2103:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/http/corsclient_test.js -> javascript/webdriver/test/http/corsclient_test.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2104:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/http/http_test.js -> javascript/webdriver/test/http/http_test.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2105:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/http/xhrclient_test.js -> javascript/webdriver/test/http/xhrclient_test.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2106:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/logging_test.js -> javascript/webdriver/test/logging_test.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2107:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/stacktrace_test.js -> javascript/webdriver/test/stacktrace_test.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2108:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/test_bootstrap.js -> javascript/webdriver/test/test_bootstrap.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2109:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/testutil.js -> javascript/webdriver/test/testutil.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2110:  (17:09:03) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/webdriver/BUILD.bazel:66:19: runfiles symlink javascript/webdriver/test/testutil_test.js -> javascript/webdriver/test/testutil_test.js obscured by javascript/webdriver/test -> bazel-out/k8-fastbuild/bin/javascript/webdriver/test
    2111:  (17:09:07) �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (70 source files):
    2112:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2113:  private final ErrorCodes errorCodes;
    2114:  ^
    2115:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2116:  this.errorCodes = new ErrorCodes();
    2117:  ^
    2118:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2119:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    2120:  ^
    2121:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2122:  ErrorCodes errorCodes = new ErrorCodes();
    2123:  ^
    2124:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2125:  ErrorCodes errorCodes = new ErrorCodes();
    2126:  ^
    2127:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2128:  response.setStatus(ErrorCodes.SUCCESS);
    2129:  ^
    2130:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2131:  response.setState(ErrorCodes.SUCCESS_STRING);
    2132:  ^
    2133:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2134:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    2135:  ^
    2136:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2137:  new ErrorCodes().getExceptionType((String) rawError);
    2138:  ^
    2139:  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
    2140:  private final ErrorCodes errorCodes = new ErrorCodes();
    2141:  ^
    2142:  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
    2143:  private final ErrorCodes errorCodes = new ErrorCodes();
    2144:  ^
    2145:  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
    2146:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    2147:  ^
    2148:  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
    2149:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2150:  ^
    2151:  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
    2152:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2153:  ^
    2154:  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
    2155:  response.setStatus(ErrorCodes.SUCCESS);
    2156:  ^
    2157:  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
    2158:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2159:  ^
    2160:  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
    2161:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2162:  ^
    2163:  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
    2164:  private final ErrorCodes errorCodes = new ErrorCodes();
    2165:  ^
    2166:  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
    2167:  private final ErrorCodes errorCodes = new ErrorCodes();
    2168:  ^
    2169:  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
    2170:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2171:  ^
    2172:  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
    2173:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2174:  ^
    2175:  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
    2176:  response.setStatus(ErrorCodes.SUCCESS);
    2177:  ^
    ...
    
    2312:  * `Zip::OutputStream`
    2313:  * `Zip::DOSTime`
    2314:  Run your test suite with the `RUBYZIP_V3_API_WARN` environment
    2315:  variable set to see warnings about usage of the old API. This will
    2316:  help you to identify any changes that you need to make to your code.
    2317:  See https://github.com/rubyzip/rubyzip/wiki/Updating-to-version-3.x for
    2318:  more information.
    2319:  Please ensure that your Gemfiles and .gemspecs are suitably restrictive
    2320:  to avoid an unexpected breakage when 3.0 is released (e.g. ~> 2.3.0).
    2321:  See https://github.com/rubyzip/rubyzip for details. The Changelog also
    2322:  lists other enhancements and bugfixes that have been implemented since
    2323:  version 2.3.0.
    2324:  2 installed gems you directly depend on are looking for funding.
    2325:  Run `bundle fund` for details
    2326:  (17:09:23) �[32mAnalyzing:�[0m 2292 targets (1648 packages loaded, 56516 targets configured)
    2327:  �[32m[11,223 / 12,114]�[0m 101 / 1984 tests;�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:error-edge ... (4 actions, 0 running)
    2328:  (17:09:28) �[32mAnalyzing:�[0m 2292 targets (1648 packages loaded, 56516 targets configured)
    2329:  �[32m[11,252 / 12,149]�[0m 115 / 1984 tests;�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:error-firefox ... (28 actions, 0 running)
    2330:  (17:09:33) �[32mAnalyzing:�[0m 2292 targets (1648 packages loaded, 56516 targets configured)
    ...
    
    2332:  (17:09:38) �[32mAnalyzing:�[0m 2292 targets (1648 packages loaded, 56516 targets configured)
    2333:  �[32m[11,331 / 12,436]�[0m 156 / 1984 tests;�[0m Building java/src/org/openqa/selenium/grid/data/libdata.jar (29 source files); 7s remote, remote-cache ... (50 actions, 4 running)
    2334:  (17:09:43) �[32mAnalyzing:�[0m 2292 targets (1649 packages loaded, 56516 targets configured)
    2335:  �[32m[11,354 / 12,511]�[0m 166 / 1984 tests;�[0m Building java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.jar (1 source file); 6s remote, remote-cache ... (50 actions, 5 running)
    2336:  (17:09:48) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 60454 targets configured)
    2337:  �[32m[11,389 / 12,638]�[0m 189 / 1984 tests;�[0m Building java/src/org/openqa/selenium/grid/sessionmap/libsessionmap.jar (6 source files); 6s remote, remote-cache ... (50 actions, 3 running)
    2338:  (17:09:53) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 60497 targets configured)
    2339:  �[32m[11,442 / 12,826]�[0m 223 / 1984 tests;�[0m Building java/src/org/openqa/selenium/grid/sessionqueue/config/libconfig.jar (2 source files) and running annotation processors (AutoServiceProcessor); 1s remote, remote-cache ... (50 actions, 3 running)
    2340:  (17:09:58) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 60497 targets configured)
    2341:  �[32m[11,551 / 12,846]�[0m 309 / 1984 tests;�[0m Building java/src/org/openqa/selenium/grid/node/libnode.jar (20 source files); 5s remote, remote-cache ... (50 actions, 4 running)
    2342:  (17:10:03) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 60497 targets configured)
    2343:  �[32m[11,641 / 12,850]�[0m 390 / 1984 tests;�[0m Building java/src/org/openqa/selenium/grid/sessionqueue/remote/libremote.jar (1 source file); 5s remote, remote-cache ... (50 actions, 2 running)
    2344:  (17:10:08) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 60497 targets configured)
    2345:  �[32m[11,758 / 12,861]�[0m 489 / 1984 tests;�[0m Testing //java/src/org/openqa/selenium/grid/data:data-spotbugs; 3s remote, remote-cache ... (50 actions, 2 running)
    2346:  (17:10:10) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/libsmall-tests-test-lib.jar (5 source files) and running annotation processors (AutoServiceProcessor):
    2347:  java/test/org/openqa/selenium/remote/WebDriverFixture.java:170: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2348:  response.setStatus(new ErrorCodes().toStatus(state, Optional.of(400)));
    2349:  ^
    2350:  (17:10:13) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 63610 targets configured)
    2351:  �[32m[11,893 / 12,908]�[0m 609 / 2008 tests;�[0m Testing //java/src/org/openqa/selenium/grid/data:data-spotbugs; 8s remote, remote-cache ... (50 actions, 4 running)
    2352:  (17:10:17) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/ErrorHandlerTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2353:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:79: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2354:  handler.throwIfResponseFailed(createResponse(ErrorCodes.SUCCESS), 100);
    2355:  ^
    2356:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:85: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2357:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2358:  ^
    2359:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:86: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2360:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2361:  ^
    2362:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:87: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2363:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2364:  ^
    2365:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:88: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2366:  assertThrowsCorrectExceptionType(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2367:  ^
    2368:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:90: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2369:  ErrorCodes.METHOD_NOT_ALLOWED, UnsupportedCommandException.class);
    2370:  ^
    2371:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:92: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2372:  ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2373:  ^
    2374:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:94: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2375:  ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2376:  ^
    2377:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:95: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2378:  assertThrowsCorrectExceptionType(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2379:  ^
    2380:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2381:  Response response = createResponse(ErrorCodes.UNHANDLED_ERROR);
    2382:  ^
    2383:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:120: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2384:  createResponse(ErrorCodes.UNHANDLED_ERROR, "boom"), 123))
    2385:  ^
    2386:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:133: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2387:  createResponse(ErrorCodes.UNHANDLED_ERROR, ImmutableMap.of("message", "boom")),
    2388:  ^
    2389:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:147: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2390:  ErrorCodes.UNHANDLED_ERROR,
    2391:  ^
    2392:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:167: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2393:  ErrorCodes.UNHANDLED_ERROR,
    2394:  ^
    2395:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:193: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2396:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2397:  ^
    2398:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:214: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2399:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2400:  ^
    2401:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:248: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2402:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2403:  ^
    2404:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:280: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2405:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2406:  ^
    2407:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:308: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2408:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2409:  ^
    2410:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:327: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2411:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2412:  ^
    2413:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:355: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2414:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2415:  ^
    2416:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:394: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2417:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2418:  ^
    2419:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:426: 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:435: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2423:  exceptions.put(ErrorCodes.NO_SUCH_SESSION, NoSuchSessionException.class);
    2424:  ^
    2425:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:436: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2426:  exceptions.put(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2427:  ^
    2428:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:437: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2429:  exceptions.put(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2430:  ^
    2431:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:438: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2432:  exceptions.put(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2433:  ^
    2434:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:439: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2435:  exceptions.put(ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2436:  ^
    2437:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:440: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2438:  exceptions.put(ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2439:  ^
    2440:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2441:  exceptions.put(ErrorCodes.UNHANDLED_ERROR, WebDriverException.class);
    2442:  ^
    2443:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:442: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2444:  exceptions.put(ErrorCodes.JAVASCRIPT_ERROR, JavascriptException.class);
    2445:  ^
    2446:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:443: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2447:  exceptions.put(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2448:  ^
    2449:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:444: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2450:  exceptions.put(ErrorCodes.TIMEOUT, TimeoutException.class);
    2451:  ^
    2452:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:445: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2453:  exceptions.put(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2454:  ^
    2455:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:446: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2456:  exceptions.put(ErrorCodes.INVALID_COOKIE_DOMAIN, InvalidCookieDomainException.class);
    2457:  ^
    2458:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:447: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2459:  exceptions.put(ErrorCodes.UNABLE_TO_SET_COOKIE, UnableToSetCookieException.class);
    2460:  ^
    2461:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:448: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2462:  exceptions.put(ErrorCodes.UNEXPECTED_ALERT_PRESENT, UnhandledAlertException.class);
    2463:  ^
    2464:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:449: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2465:  exceptions.put(ErrorCodes.NO_ALERT_PRESENT, NoAlertPresentException.class);
    2466:  ^
    2467:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:450: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2468:  exceptions.put(ErrorCodes.ASYNC_SCRIPT_TIMEOUT, ScriptTimeoutException.class);
    2469:  ^
    2470:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:451: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2471:  exceptions.put(ErrorCodes.INVALID_SELECTOR_ERROR, InvalidSelectorException.class);
    2472:  ^
    2473:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:452: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2474:  exceptions.put(ErrorCodes.SESSION_NOT_CREATED, SessionNotCreatedException.class);
    2475:  ^
    2476:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:453: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2477:  exceptions.put(ErrorCodes.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsException.class);
    2478:  ^
    2479:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2480:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR, InvalidSelectorException.class);
    2481:  ^
    2482:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:455: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2483:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR_RETURN_TYPER, InvalidSelectorException.class);
    2484:  ^
    2485:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:469: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2486:  ? ErrorCodes.INVALID_SELECTOR_ERROR
    2487:  ^
    2488:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:471: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2489:  assertThat(new ErrorCodes().toStatusCode(e)).isEqualTo(expected);
    2490:  ^
    2491:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:483: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2492:  response.setState(new ErrorCodes().toState(status));
    2493:  ^
    2494:  (17:10:18) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 63679 targets configured)
    2495:  �[32m[12,077 / 13,085]�[0m 719 / 2076 tests;�[0m [Sched] Building java/src/org/openqa/selenium/grid/node/docker/libdocker.jar (5 source files) and running annotation processors (AutoServiceProcessor); 6s ... (48 actions, 5 running)
    2496:  (17:10:22) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/RemotableByTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2497:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2498:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2499:  ^
    2500:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2501:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2502:  ^
    2503:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2504:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2505:  ^
    2506:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2507:  private final ErrorCodes errorCodes = new ErrorCodes();
    2508:  ^
    2509:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2510:  private final ErrorCodes errorCodes = new ErrorCodes();
    2511:  ^
    2512:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2513:  private final ErrorCodes errorCodes = new ErrorCodes();
    2514:  ^
    2515:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2516:  private final ErrorCodes errorCodes = new ErrorCodes();
    2517:  ^
    2518:  (17:10:24) �[32mAnalyzing:�[0m 2292 targets (1650 packages loaded, 63724 targets configured)
    2519:  �[32m[12,476 / 13,477]�[0m 855 / 2121 tests;�[0m Building java/src/org/openqa/selenium/grid/node/relay/librelay.jar (3 source files) and running annotation processors (AutoServiceProcessor); 6s remote, remote-cache ... (46 actions, 6 running)
    2520:  (17:10:24) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.jar (1 source file):
    2521:  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
    2522:  import static org.openqa.selenium.remote.ErrorCodes.METHOD_NOT_ALLOWED;
    2523:  ^
    2524:  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
    2525:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.SUCCESS);
    2526:  ^
    2527:  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
    2528:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2529:  ^
    2530:  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
    2531:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2532:  ^
    2533:  (17:10:24) �[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:  ^
    ...
    
    2700:  (17:20:14) �[32m[16,007 / 16,055]�[0m 2171 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox-remote; 82s remote, remote-cache ... (48 actions, 43 running)
    2701:  (17:20:19) �[32m[16,010 / 16,055]�[0m 2174 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox-remote; 81s remote, remote-cache ... (45 actions running)
    2702:  (17:20:22) �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:action_builder-firefox-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/action_builder-firefox-remote/test_attempts/attempt_1.log)
    2703:  (17:20:25) �[32m[16,018 / 16,057]�[0m 2182 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox-remote; 86s remote, remote-cache ... (39 actions running)
    2704:  (17:20:30) �[32m[16,026 / 16,057]�[0m 2190 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox-remote; 91s remote, remote-cache ... (31 actions running)
    2705:  (17:20:36) �[32m[16,031 / 16,057]�[0m 2195 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox-remote; 97s remote, remote-cache ... (26 actions running)
    2706:  (17:20:42) �[32m[16,033 / 16,057]�[0m 2197 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox-remote; 104s remote, remote-cache ... (24 actions running)
    2707:  (17:20:47) �[32m[16,036 / 16,057]�[0m 2199 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox-remote; 109s remote, remote-cache ... (21 actions running)
    2708:  (17:20:54) �[32m[16,039 / 16,057]�[0m 2202 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox-remote; 98s remote, remote-cache ... (18 actions running)
    2709:  (17:21:02) �[32m[16,039 / 16,057]�[0m 2202 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox-remote; 106s remote, remote-cache ... (18 actions running)
    2710:  (17:21:09) �[32m[16,040 / 16,057]�[0m 2204 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox-remote; 113s remote, remote-cache ... (17 actions running)
    2711:  (17:21:14) �[32m[16,041 / 16,057]�[0m 2204 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox-remote; 118s remote, remote-cache ... (16 actions running)
    2712:  (17:21:19) �[32m[16,043 / 16,057]�[0m 2207 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox-remote; 123s remote, remote-cache ... (14 actions running)
    2713:  (17:21:28) �[32m[16,044 / 16,057]�[0m 2207 / 2292 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox-remote; 132s remote, remote-cache ... (13 actions running)
    2714:  (17:21:29) �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:action_builder-firefox-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/action_builder-firefox-remote/test.log)
    2715:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver:action_builder-firefox-remote (Summary)
    2716:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/action_builder-firefox-remote/test.log
    ...
    
    2747:  #context_click
    2748:  right clicks an element
    2749:  executes with equivalent pointer methods
    2750:  #move_to
    2751:  moves to element
    2752:  moves to element with offset
    2753:  #drag_and_drop
    2754:  moves one element to another
    2755:  #drag_and_drop_by
    2756:  moves one element a provided distance
    2757:  #move_to_location
    2758:  moves pointer to specified coordinates
    2759:  pen stylus
    2760:  sets pointer event properties (PENDING: Test guarded; Guarded by {:browser=>:firefox, :reason=>"Unknown pointerType"};)
    2761:  #scroll_to
    2762:  scrolls to element (PENDING: Test guarded; Guarded by {:browser=>:firefox, :reason=>"incorrect MoveTargetOutOfBoundsError"};)
    2763:  #scroll_by
    2764:  scrolls by given amount (FAILED - 1)
    2765:  #scroll_from
    2766:  scrolls from element by given amount (PENDING: Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};)
    2767:  scrolls from element by given amount with offset (PENDING: Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};)
    2768:  raises MoveTargetOutOfBoundsError when origin offset from element is out of viewport
    2769:  scrolls by given amount with offset
    2770:  raises MoveTargetOutOfBoundsError when origin offset is out of viewport
    2771:  Pending: (Failures listed here are expected and do not affect your suite's status)
    2772:  1) Selenium::WebDriver::ActionBuilder pen stylus sets pointer event properties
    2773:  # Test guarded; Guarded by {:browser=>:firefox, :reason=>"Unknown pointerType"};
    2774:  Failure/Error: actions.perform
    2775:  Selenium::WebDriver::Error::UnknownError:
    2776:  Error: Unimplemented pointerMove for pointerType pen
    2777:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2778:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2779:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2780:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2781:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2782:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2783:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2784:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2785:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    2786:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    2787:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:283:in `block in WebDriver'
    2788:  # ------------------
    2789:  # --- Caused by: ---
    2790:  # Selenium::WebDriver::Error::WebDriverError:
    2791:  #   pointerMove@chrome://remote/content/shared/webdriver/Actions.sys.mjs:2396:11
    2792:  performPointerMoveStep@chrome://remote/content/shared/webdriver/Actions.sys.mjs:1631:31
    2793:  dispatch/<@chrome://remote/content/shared/webdriver/Actions.sys.mjs:1598:20
    2794:  moveOverTime/transitions<@chrome://remote/content/shared/webdriver/Actions.sys.mjs:2323:9
    2795:  2) Selenium::WebDriver::ActionBuilder#scroll_to scrolls to element
    2796:  # Test guarded; Guarded by {:browser=>:firefox, :reason=>"incorrect MoveTargetOutOfBoundsError"};
    2797:  Failure/Error: driver.action.scroll_to(iframe).perform
    2798:  Selenium::WebDriver::Error::MoveTargetOutOfBoundsError:
    2799:  Move target (410, 2913) is out of bounds of viewport dimensions (1280, 819)
    2800:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2801:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2802:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2803:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2804:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2805:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2806:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2807:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2808:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    2809:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    2810:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:316:in `block in WebDriver'
    2811:  # ------------------
    2812:  # --- Caused by: ---
    2813:  # Selenium::WebDriver::Error::WebDriverError:
    2814:  #   RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
    2815:  WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:199:5
    2816:  MoveTargetOutOfBoundsError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:518:5
    2817:  assertTargetInViewPort@chrome://remote/content/shared/webdriver/Actions.sys.mjs:3103:11
    2818:  #assertInViewPort@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:115:17
    2819:  receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:210:42
    2820:  3) Selenium::WebDriver::ActionBuilder#scroll_from scrolls from element by given amount
    2821:  # Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};
    2822:  Failure/Error: driver.action.scroll_from(scroll_origin, 0, 200).perform
    2823:  Selenium::WebDriver::Error::MoveTargetOutOfBoundsError:
    2824:  Move target (410, 2913) is out of bounds of viewport dimensions (1280, 819)
    2825:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2826:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2827:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2828:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2829:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2830:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2831:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2832:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2833:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    2834:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    2835:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:343:in `block in WebDriver'
    2836:  # ------------------
    2837:  # --- Caused by: ---
    2838:  # Selenium::WebDriver::Error::WebDriverError:
    2839:  #   RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
    2840:  WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:199:5
    2841:  MoveTargetOutOfBoundsError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:518:5
    2842:  assertTargetInViewPort@chrome://remote/content/shared/webdriver/Actions.sys.mjs:3103:11
    2843:  #assertInViewPort@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:115:17
    2844:  receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:210:42
    2845:  4) Selenium::WebDriver::ActionBuilder#scroll_from scrolls from element by given amount with offset
    2846:  # Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};
    2847:  Failure/Error: driver.action.scroll_from(scroll_origin, 0, 200).perform
    2848:  Selenium::WebDriver::Error::MoveTargetOutOfBoundsError:
    2849:  Move target (640, 2967) is out of bounds of viewport dimensions (1280, 819)
    2850:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2851:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2852:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2853:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2854:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2855:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2856:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2857:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2858:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    2859:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    2860:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:357:in `block in WebDriver'
    2861:  # ------------------
    2862:  # --- Caused by: ---
    2863:  # Selenium::WebDriver::Error::WebDriverError:
    2864:  #   RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
    2865:  WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:199:5
    2866:  MoveTargetOutOfBoundsError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:518:5
    2867:  assertTargetInViewPort@chrome://remote/content/shared/webdriver/Actions.sys.mjs:3103:11
    2868:  #assertInViewPort@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:115:17
    2869:  receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:210:42
    2870:  Failures:
    2871:  1) Selenium::WebDriver::ActionBuilder#scroll_by scrolls by given amount
    2872:  Failure/Error: expect(in_viewport?(footer)).to be true
    2873:  expected true
    2874:  got false
    2875:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:332:in `block in WebDriver'
    2876:  Finished in 50.86 seconds (files took 2.42 seconds to load)
    2877:  27 examples, 1 failure, 4 pending
    2878:  Failed examples:
    2879:  rspec ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:323 # Selenium::WebDriver::ActionBuilder#scroll_by scrolls by given amount
    ...
    
    2910:  #context_click
    2911:  right clicks an element
    2912:  executes with equivalent pointer methods
    2913:  #move_to
    2914:  moves to element
    2915:  moves to element with offset
    2916:  #drag_and_drop
    2917:  moves one element to another
    2918:  #drag_and_drop_by
    2919:  moves one element a provided distance
    2920:  #move_to_location
    2921:  moves pointer to specified coordinates
    2922:  pen stylus
    2923:  sets pointer event properties (PENDING: Test guarded; Guarded by {:browser=>:firefox, :reason=>"Unknown pointerType"};)
    2924:  #scroll_to
    2925:  scrolls to element (PENDING: Test guarded; Guarded by {:browser=>:firefox, :reason=>"incorrect MoveTargetOutOfBoundsError"};)
    2926:  #scroll_by
    2927:  scrolls by given amount (FAILED - 1)
    2928:  #scroll_from
    2929:  scrolls from element by given amount (PENDING: Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};)
    2930:  scrolls from element by given amount with offset (PENDING: Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};)
    2931:  raises MoveTargetOutOfBoundsError when origin offset from element is out of viewport
    2932:  scrolls by given amount with offset
    2933:  raises MoveTargetOutOfBoundsError when origin offset is out of viewport
    2934:  Pending: (Failures listed here are expected and do not affect your suite's status)
    2935:  1) Selenium::WebDriver::ActionBuilder pen stylus sets pointer event properties
    2936:  # Test guarded; Guarded by {:browser=>:firefox, :reason=>"Unknown pointerType"};
    2937:  Failure/Error: actions.perform
    2938:  Selenium::WebDriver::Error::UnknownError:
    2939:  Error: Unimplemented pointerMove for pointerType pen
    2940:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2941:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2942:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2943:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2944:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2945:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2946:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2947:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2948:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    2949:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    2950:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:283:in `block in WebDriver'
    2951:  # ------------------
    2952:  # --- Caused by: ---
    2953:  # Selenium::WebDriver::Error::WebDriverError:
    2954:  #   pointerMove@chrome://remote/content/shared/webdriver/Actions.sys.mjs:2396:11
    2955:  performPointerMoveStep@chrome://remote/content/shared/webdriver/Actions.sys.mjs:1631:31
    2956:  dispatch/<@chrome://remote/content/shared/webdriver/Actions.sys.mjs:1598:20
    2957:  moveOverTime/transitions<@chrome://remote/content/shared/webdriver/Actions.sys.mjs:2323:9
    2958:  2) Selenium::WebDriver::ActionBuilder#scroll_to scrolls to element
    2959:  # Test guarded; Guarded by {:browser=>:firefox, :reason=>"incorrect MoveTargetOutOfBoundsError"};
    2960:  Failure/Error: driver.action.scroll_to(iframe).perform
    2961:  Selenium::WebDriver::Error::MoveTargetOutOfBoundsError:
    2962:  Move target (410, 2913) is out of bounds of viewport dimensions (1280, 819)
    2963:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2964:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2965:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2966:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2967:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2968:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2969:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2970:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2971:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    2972:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    2973:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:316:in `block in WebDriver'
    2974:  # ------------------
    2975:  # --- Caused by: ---
    2976:  # Selenium::WebDriver::Error::WebDriverError:
    2977:  #   RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
    2978:  WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:199:5
    2979:  MoveTargetOutOfBoundsError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:518:5
    2980:  assertTargetInViewPort@chrome://remote/content/shared/webdriver/Actions.sys.mjs:3103:11
    2981:  #assertInViewPort@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:115:17
    2982:  receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:210:42
    2983:  3) Selenium::WebDriver::ActionBuilder#scroll_from scrolls from element by given amount
    2984:  # Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};
    2985:  Failure/Error: driver.action.scroll_from(scroll_origin, 0, 200).perform
    2986:  Selenium::WebDriver::Error::MoveTargetOutOfBoundsError:
    2987:  Move target (410, 2913) is out of bounds of viewport dimensions (1280, 819)
    2988:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2989:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2990:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2991:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2992:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2993:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2994:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2995:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2996:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    2997:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    2998:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:343:in `block in WebDriver'
    2999:  # ------------------
    3000:  # --- Caused by: ---
    3001:  # Selenium::WebDriver::Error::WebDriverError:
    3002:  #   RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
    3003:  WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:199:5
    3004:  MoveTargetOutOfBoundsError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:518:5
    3005:  assertTargetInViewPort@chrome://remote/content/shared/webdriver/Actions.sys.mjs:3103:11
    3006:  #assertInViewPort@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:115:17
    3007:  receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:210:42
    3008:  4) Selenium::WebDriver::ActionBuilder#scroll_from scrolls from element by given amount with offset
    3009:  # Test guarded; Guarded by {:browser=>[:firefox, :safari], :reason=>"incorrect MoveTargetOutOfBoundsError"};
    3010:  Failure/Error: driver.action.scroll_from(scroll_origin, 0, 200).perform
    3011:  Selenium::WebDriver::Error::MoveTargetOutOfBoundsError:
    3012:  Move target (640, 2967) is out of bounds of viewport dimensions (1280, 819)
    3013:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    3014:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    3015:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    3016:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    3017:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    3018:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    3019:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    3020:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    3021:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:353:in `send_actions'
    3022:  # ./rb/lib/selenium/webdriver/common/action_builder.rb:198:in `perform'
    3023:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:357:in `block in WebDriver'
    3024:  # ------------------
    3025:  # --- Caused by: ---
    3026:  # Selenium::WebDriver::Error::WebDriverError:
    3027:  #   RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
    3028:  WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:199:5
    3029:  MoveTargetOutOfBoundsError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:518:5
    3030:  assertTargetInViewPort@chrome://remote/content/shared/webdriver/Actions.sys.mjs:3103:11
    3031:  #assertInViewPort@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:115:17
    3032:  receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:210:42
    3033:  Failures:
    3034:  1) Selenium::WebDriver::ActionBuilder#scroll_by scrolls by given amount
    3035:  Failure/Error: expect(in_viewport?(footer)).to be true
    3036:  expected true
    3037:  got false
    3038:  # ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:332:in `block in WebDriver'
    3039:  Finished in 50.69 seconds (files took 2.28 seconds to load)
    3040:  27 examples, 1 failure, 4 pending
    3041:  Failed examples:
    3042:  rspec ./rb/spec/integration/selenium/webdriver/action_builder_spec.rb:323 # Selenium::WebDriver::ActionBuilder#scroll_by scrolls by given amount
    3043:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChAehpOE9HpeYKQGvhAL_cV3EgdkZWZhdWx0GiUKIOXCI_NhkyyFN0lzmXwousKlGWmtWr344ugcSJbDY9OEELwD
    3044:  ================================================================================
    3045:  (17:21:34) �[32m[16,045 / 16,057]�[0m 2208 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-edge; 108s remote, remote-cache ... (12 actions running)
    3046:  (17:21:39) �[32m[16,048 / 16,057]�[0m 2211 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 111s remote, remote-cache ... (9 actions running)
    3047:  (17:21:48) �[32m[16,048 / 16,057]�[0m 2211 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 120s remote, remote-cache ... (9 actions running)
    3048:  (17:22:05) �[32m[16,048 / 16,057]�[0m 2212 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 137s remote, remote-cache ... (9 actions running)
    3049:  (17:22:14) �[32m[16,049 / 16,057]�[0m 2212 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 146s remote, remote-cache ... (8 actions running)
    3050:  (17:22:24) �[32m[16,049 / 16,057]�[0m 2212 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 156s remote, remote-cache ... (8 actions running)
    3051:  (17:22:45) �[32m[16,049 / 16,057]�[0m 2213 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 177s remote, remote-cache ... (8 actions running)
    3052:  (17:22:54) �[32m[16,051 / 16,057]�[0m 2214 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 186s remote, remote-cache ... (6 actions running)
    3053:  (17:23:00) �[32m[16,051 / 16,057]�[0m 2214 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 192s remote, remote-cache ... (6 actions running)
    3054:  (17:23:11) �[32m[16,051 / 16,057]�[0m 2215 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 203s remote, remote-cache ... (6 actions running)
    3055:  (17:23:19) �[32m[16,053 / 16,057]�[0m 2216 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 211s remote, remote-cache ... (4 actions running)
    3056:  (17:23:24) �[32m[16,055 / 16,057]�[0m 2218 / 2292 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openq...

    @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
    @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
    @VietND96 VietND96 merged commit 4cacd4a into trunk May 2, 2025
    33 of 34 checks passed
    @VietND96 VietND96 deleted the relay-node-match branch May 2, 2025 16:48
    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