Skip to content
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

[grid] Improve SlotMatcher and SlotSelector on request browserVersion #14914

Open
wants to merge 1 commit into
base: trunk
Choose a base branch
from

Conversation

VietND96
Copy link
Member

@VietND96 VietND96 commented Dec 18, 2024

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.

Description

This improvement helps autoscaling control strictly on a request without the capability to set browserVersion will be assigned to list Slots with top priority on stereotype without browserVersion or a latest browserVersion (based on SemVer comparison).

Improve DefaultSlotMatcher, where the request with cap browserVersion=130 can match to slot with stereotype browserVersion=130.0 (based on SemVer comparison return 0). Few corner case also covered e.g

    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131")).isEqualTo(0); -> match
    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131.0")).isEqualTo(0); -> match
    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131.0.6778")).isEqualTo(0); -> match
    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131.0.6778.95")).isEqualTo(1); -> not match

Motivation and Context

This pull request introduces several important changes to the Selenium Grid project, focusing on improving the way browser versions are compared and sorted. The changes include implementing a custom semantic version comparator, updating the slot selection logic, and adding relevant tests.

Improvements to browser version comparison:

Updates to slot selection logic:

Addition of tests:

Miscellaneous:

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

Enhancement


Description

Enhanced browser version handling in Selenium Grid with the following improvements:

  • Implemented semantic version comparison for better browser version matching

    • Supports partial version matching (e.g., "131" matches "131.0.6778.85")
    • Handles empty versions and special versions (e.g., "stable", "beta")
    • Provides descending order comparison for version sorting
  • Improved slot selection and matching logic:

    • Added browser version as a sorting criterion in slot selection
    • Prioritizes slots with empty browser versions
    • Enhanced version comparison in DefaultSlotMatcher
  • Added comprehensive test coverage:

    • Test cases for various version formats and edge cases
    • Tests for node ordering based on browser versions
    • Verification of slot selection behavior
  • Code quality improvements:

    • Added missing license header to Rust file
    • Enhanced code documentation

Changes walkthrough 📝

Relevant files
Enhancement
DefaultSlotMatcher.java
Improved browser version matching logic                                   

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

  • Enhanced browser version matching using semantic version comparison
  • Replaced direct version equality check with semVerComparator for more
    flexible matching
  • +3/-1     
    NodeStatus.java
    Added semantic version comparison functionality                   

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

  • Added new getBrowserVersion method to retrieve minimum browser version
  • Implemented custom semVerComparator for semantic version comparison
  • Added helper method isNumber for version parsing
  • +59/-0   
    DefaultSlotSelector.java
    Enhanced slot selection with version-based sorting             

    java/src/org/openqa/selenium/grid/distributor/selector/DefaultSlotSelector.java

  • Added browser version comparison to slot selection sorting criteria
  • Enhanced slot selection to prioritize empty versions first
  • +5/-0     
    Tests
    NodeStatusTest.java
    Added tests for semantic version comparison                           

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

  • Added comprehensive test cases for browser version comparison
  • Covered various version formats and edge cases
  • +21/-0   
    DefaultSlotSelectorTest.java
    Added tests for version-based node ordering                           

    java/test/org/openqa/selenium/grid/distributor/selector/DefaultSlotSelectorTest.java

  • Added test cases for node ordering by browser version
  • Added helper method for creating nodes with specific stereotypes
  • +51/-0   
    Documentation
    lock.rs
    Added missing license header                                                         

    rust/src/lock.rs

    • Added license header to the file
    +17/-0   

    💡 PR-Agent usage: Comment /help "your question" on any pull request to receive relevant information

    Copy link
    Contributor

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

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

    Possible Bug
    The semVerComparator implementation assumes all version parts are either numeric or strings, but doesn't handle mixed formats like "131.0a1". This could lead to incorrect version comparisons.

    Performance Issue
    The getBrowserVersion method uses parallelStream() which may have overhead for small collections. Consider using regular stream() unless parallel processing is really needed.

    Code Smell
    The browserVersionMatch logic has multiple conditions that could be simplified and made more readable by extracting helper methods.

    Copy link
    Contributor

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Score
    Possible issue
    Prevent integer overflow in version number parsing by using long instead of int

    Add input validation to prevent potential integer overflow when parsing version
    numbers. Consider using Long.parseLong() instead of Integer.parseInt() for larger
    version numbers.

    java/src/org/openqa/selenium/grid/data/NodeStatus.java [234-235]

    -int num1 = Integer.parseInt(part1);
    -int num2 = Integer.parseInt(part2);
    +long num1 = Long.parseLong(part1);
    +long num2 = Long.parseLong(part2);
    +if (num1 != num2) {
    +    return Long.compare(num2, num1); // Descending order
    +}
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This is a critical improvement that prevents potential integer overflow issues when parsing large version numbers, which could lead to incorrect version comparisons and system instability.

    8
    Handle potential number format exceptions in version comparison to prevent runtime crashes

    Add try-catch block around version number parsing to handle malformed version
    strings that contain valid numbers but exceed the maximum value.

    java/src/org/openqa/selenium/grid/data/NodeStatus.java [232-238]

     if (isPart1Numeric && isPart2Numeric) {
    -    // Compare numerically
    -    int num1 = Integer.parseInt(part1);
    -    int num2 = Integer.parseInt(part2);
    -    if (num1 != num2) {
    -      return Integer.compare(num2, num1); // Descending order
    +    try {
    +        // Compare numerically
    +        long num1 = Long.parseLong(part1);
    +        long num2 = Long.parseLong(part2);
    +        if (num1 != num2) {
    +            return Long.compare(num2, num1); // Descending order
    +        }
    +    } catch (NumberFormatException e) {
    +        // Fall back to string comparison if numbers are too large
    +        return part2.compareTo(part1);
         }
    • Apply this suggestion
    Suggestion importance[1-10]: 7

    Why: Important defensive programming that adds robustness by gracefully handling malformed version numbers, preventing potential runtime crashes in production.

    7
    Prevent null pointer exceptions in version string processing

    Add null check before splitting version strings to prevent NullPointerException, as
    getBrowserVersion() could potentially return null.

    java/src/org/openqa/selenium/grid/data/NodeStatus.java [221-222]

    +if (v1 == null) v1 = "";
    +if (v2 == null) v2 = "";
     String[] parts1 = v1.split("\\.");
     String[] parts2 = v2.split("\\.");
    • Apply this suggestion
    Suggestion importance[1-10]: 6

    Why: Valid defensive programming suggestion that prevents potential NullPointerException, though the current code context suggests null values are already handled by the empty string checks.

    6

    Copy link
    Contributor

    qodo-merge-pro bot commented Dec 18, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit 7369c6a)

    Action: Test / All RBE tests

    Failed stage: Run Bazel [❌]

    Failed test name: testShouldBeAbleToClickOnAnElementInFrameGreaterThanTwoViewports

    Failure summary:

    The action failed because the test testShouldBeAbleToClickOnAnElementInFrameGreaterThanTwoViewports
    in ClickTest-firefox-beta failed. The test timed out waiting for the page title to change to
    "clicks" after 10 seconds. The actual title remained as "This page has iframes".

    Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    970:  Package 'php-symfony-debug-bundle' is not installed, so not removed
    971:  Package 'php-symfony-dependency-injection' is not installed, so not removed
    972:  Package 'php-symfony-deprecation-contracts' is not installed, so not removed
    973:  Package 'php-symfony-discord-notifier' is not installed, so not removed
    974:  Package 'php-symfony-doctrine-bridge' is not installed, so not removed
    975:  Package 'php-symfony-doctrine-messenger' is not installed, so not removed
    976:  Package 'php-symfony-dom-crawler' is not installed, so not removed
    977:  Package 'php-symfony-dotenv' is not installed, so not removed
    978:  Package 'php-symfony-error-handler' is not installed, so not removed
    ...
    
    1859:  (19:02:30) �[33mDEBUG: �[0m/home/runner/.bazel/external/io_bazel_rules_closure/closure/compiler/closure_js_deps.bzl:38:10: closure_js_deps() and deps.js files are deprecated. Please remove your closure_js_deps rules and, if needed, use the google-closure-deps npm module with bazelbuild/rules_nodejs to generate deps.js files.
    1860:  (19:02:31) �[33mDEBUG: �[0m/home/runner/.bazel/external/io_bazel_rules_closure/closure/compiler/closure_js_deps.bzl:38:10: closure_js_deps() and deps.js files are deprecated. Please remove your closure_js_deps rules and, if needed, use the google-closure-deps npm module with bazelbuild/rules_nodejs to generate deps.js files.
    1861:  (19:02:31) �[33mDEBUG: �[0m/home/runner/.bazel/external/io_bazel_rules_closure/closure/compiler/closure_js_deps.bzl:38:10: closure_js_deps() and deps.js files are deprecated. Please remove your closure_js_deps rules and, if needed, use the google-closure-deps npm module with bazelbuild/rules_nodejs to generate deps.js files.
    1862:  (19:02:33) �[32mAnalyzing:�[0m 2167 targets (1561 packages loaded, 53618 targets configured)
    1863:  �[32m[935 / 935]�[0m 2 / 2 tests;�[0m checking cached actions
    1864:  (19:02:38) �[32mAnalyzing:�[0m 2167 targets (1566 packages loaded, 54791 targets configured)
    1865:  �[32m[935 / 935]�[0m 2 / 2 tests;�[0m checking cached actions
    1866:  (19:02:43) �[32mAnalyzing:�[0m 2167 targets (1573 packages loaded, 54971 targets configured)
    1867:  �[32m[1,514 / 3,001]�[0m 2 / 193 tests;�[0m Creating source manifest for //rb/spec/integration/selenium/webdriver:error-firefox; 0s local ... (4 actions, 3 running)
    ...
    
    1898:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1899:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1900:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1901:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1902:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1903:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1904:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1905:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1906:  (19:02:49) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    ...
    
    2139:  (19:03:02) �[32mINFO: �[0mFrom Building external/protobuf~/java/core/libcore.jar (43 source files, 1 source jar) [for tool]:
    2140:  external/protobuf~/java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java:28: warning: [dep-ann] deprecated item is not annotated with @Deprecated
    2141:  public class RepeatedFieldBuilderV3<
    2142:  ^
    2143:  (19:03:03) �[32mINFO: �[0mFrom PackageZip javascript/grid-ui/react-zip.jar:
    2144:  /mnt/engflow/worker/work/0/exec/bazel-out/k8-opt-exec-ST-a934f86a68ba/bin/external/rules_pkg~/pkg/private/zip/build_zip.runfiles/rules_python~~python~python_3_8_x86_64-unknown-linux-gnu/lib/python3.8/zipfile.py:1525: UserWarning: Duplicate name: 'grid-ui/'
    2145:  return self._open_to_write(zinfo, force_zip64=force_zip64)
    2146:  (19:03:03) �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files):
    2147:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2148:  private final ErrorCodes errorCodes;
    2149:  ^
    2150:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2151:  this.errorCodes = new ErrorCodes();
    2152:  ^
    2153:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2154:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    2155:  ^
    2156:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2157:  ErrorCodes errorCodes = new ErrorCodes();
    2158:  ^
    2159:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2160:  ErrorCodes errorCodes = new ErrorCodes();
    2161:  ^
    2162:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2163:  response.setStatus(ErrorCodes.SUCCESS);
    2164:  ^
    2165:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2166:  response.setState(ErrorCodes.SUCCESS_STRING);
    2167:  ^
    2168:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2169:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    2170:  ^
    2171:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2172:  new ErrorCodes().getExceptionType((String) rawError);
    2173:  ^
    2174:  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
    2175:  private final ErrorCodes errorCodes = new ErrorCodes();
    2176:  ^
    2177:  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
    2178:  private final ErrorCodes errorCodes = new ErrorCodes();
    2179:  ^
    2180:  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
    2181:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    2182:  ^
    2183:  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
    2184:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2185:  ^
    2186:  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
    2187:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2188:  ^
    2189:  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
    2190:  response.setStatus(ErrorCodes.SUCCESS);
    2191:  ^
    2192:  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
    2193:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2194:  ^
    2195:  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
    2196:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2197:  ^
    2198:  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
    2199:  private final ErrorCodes errorCodes = new ErrorCodes();
    2200:  ^
    2201:  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
    2202:  private final ErrorCodes errorCodes = new ErrorCodes();
    2203:  ^
    2204:  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
    2205:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2206:  ^
    2207:  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
    2208:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2209:  ^
    2210:  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
    2211:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    2220:  �[32m[9,667 / 10,711]�[0m 164 / 1571 tests;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-storage-test.js-chrome; 7s remote, remote-cache ... (50 actions, 0 running)
    2221:  (19:03:26) �[32mAnalyzing:�[0m 2167 targets (1627 packages loaded, 58664 targets configured)
    2222:  �[32m[9,691 / 11,231]�[0m 185 / 1790 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox-bidi; 6s remote, remote-cache ... (50 actions, 0 running)
    2223:  (19:03:31) �[32mAnalyzing:�[0m 2167 targets (1627 packages loaded, 60083 targets configured)
    2224:  �[32m[9,774 / 11,419]�[0m 233 / 1867 tests;�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:timeout-chrome ... (48 actions, 8 running)
    2225:  (19:03:36) �[32mAnalyzing:�[0m 2167 targets (1631 packages loaded, 63228 targets configured)
    2226:  �[32m[10,350 / 11,706]�[0m 323 / 1889 tests;�[0m Testing //java/src/org/openqa/selenium/grid/data:data-spotbugs; 1s remote, remote-cache ... (49 actions, 4 running)
    2227:  (19:03:37) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/libsmall-tests-test-lib.jar (5 source files) and running annotation processors (AutoServiceProcessor):
    2228:  java/test/org/openqa/selenium/remote/WebDriverFixture.java:170: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2229:  response.setStatus(new ErrorCodes().toStatus(state, Optional.of(400)));
    2230:  ^
    2231:  (19:03:39) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/ErrorHandlerTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2232:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:79: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2233:  handler.throwIfResponseFailed(createResponse(ErrorCodes.SUCCESS), 100);
    2234:  ^
    2235:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:85: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2236:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2237:  ^
    2238:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:86: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2239:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2240:  ^
    2241:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:87: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2242:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2243:  ^
    2244:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:88: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2245:  assertThrowsCorrectExceptionType(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2246:  ^
    2247:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:90: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2248:  ErrorCodes.METHOD_NOT_ALLOWED, UnsupportedCommandException.class);
    2249:  ^
    2250:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:92: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2251:  ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2252:  ^
    2253:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:94: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2254:  ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2255:  ^
    2256:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:95: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2257:  assertThrowsCorrectExceptionType(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2258:  ^
    2259:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2260:  Response response = createResponse(ErrorCodes.UNHANDLED_ERROR);
    2261:  ^
    2262:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:120: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2263:  createResponse(ErrorCodes.UNHANDLED_ERROR, "boom"), 123))
    2264:  ^
    2265:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:133: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2266:  createResponse(ErrorCodes.UNHANDLED_ERROR, ImmutableMap.of("message", "boom")),
    2267:  ^
    2268:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:147: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2269:  ErrorCodes.UNHANDLED_ERROR,
    2270:  ^
    2271:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:167: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2272:  ErrorCodes.UNHANDLED_ERROR,
    2273:  ^
    2274:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:193: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2275:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2276:  ^
    2277:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:214: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2278:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2279:  ^
    2280:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:248: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2281:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2282:  ^
    2283:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:280: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2284:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2285:  ^
    2286:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:308: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2287:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2288:  ^
    2289:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:327: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2290:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2291:  ^
    2292:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:355: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2293:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2294:  ^
    2295:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:394: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2296:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2297:  ^
    2298:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:426: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2299:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2300:  ^
    2301:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:435: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2302:  exceptions.put(ErrorCodes.NO_SUCH_SESSION, NoSuchSessionException.class);
    2303:  ^
    2304:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:436: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2305:  exceptions.put(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2306:  ^
    2307:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:437: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2308:  exceptions.put(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2309:  ^
    2310:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:438: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2311:  exceptions.put(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2312:  ^
    2313:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:439: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2314:  exceptions.put(ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2315:  ^
    2316:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:440: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2317:  exceptions.put(ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2318:  ^
    2319:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2320:  exceptions.put(ErrorCodes.UNHANDLED_ERROR, WebDriverException.class);
    2321:  ^
    2322:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:442: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2323:  exceptions.put(ErrorCodes.JAVASCRIPT_ERROR, JavascriptException.class);
    2324:  ^
    2325:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:443: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2326:  exceptions.put(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2327:  ^
    2328:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:444: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2329:  exceptions.put(ErrorCodes.TIMEOUT, TimeoutException.class);
    2330:  ^
    2331:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:445: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2332:  exceptions.put(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2333:  ^
    2334:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:446: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2335:  exceptions.put(ErrorCodes.INVALID_COOKIE_DOMAIN, InvalidCookieDomainException.class);
    2336:  ^
    2337:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:447: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2338:  exceptions.put(ErrorCodes.UNABLE_TO_SET_COOKIE, UnableToSetCookieException.class);
    2339:  ^
    2340:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:448: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2341:  exceptions.put(ErrorCodes.UNEXPECTED_ALERT_PRESENT, UnhandledAlertException.class);
    2342:  ^
    2343:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:449: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2344:  exceptions.put(ErrorCodes.NO_ALERT_PRESENT, NoAlertPresentException.class);
    2345:  ^
    2346:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:450: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2347:  exceptions.put(ErrorCodes.ASYNC_SCRIPT_TIMEOUT, ScriptTimeoutException.class);
    2348:  ^
    2349:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:451: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2350:  exceptions.put(ErrorCodes.INVALID_SELECTOR_ERROR, InvalidSelectorException.class);
    2351:  ^
    2352:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:452: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2353:  exceptions.put(ErrorCodes.SESSION_NOT_CREATED, SessionNotCreatedException.class);
    2354:  ^
    2355:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:453: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2356:  exceptions.put(ErrorCodes.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsException.class);
    2357:  ^
    2358:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2359:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR, InvalidSelectorException.class);
    2360:  ^
    2361:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:455: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2362:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR_RETURN_TYPER, InvalidSelectorException.class);
    2363:  ^
    2364:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:469: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2365:  ? ErrorCodes.INVALID_SELECTOR_ERROR
    2366:  ^
    2367:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:471: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2368:  assertThat(new ErrorCodes().toStatusCode(e)).isEqualTo(expected);
    2369:  ^
    2370:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:483: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2371:  response.setState(new ErrorCodes().toState(status));
    2372:  ^
    2373:  (19:03:40) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/RemotableByTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2374:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2375:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2376:  ^
    2377:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2378:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2379:  ^
    2380:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2381:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2382:  ^
    2383:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2384:  private final ErrorCodes errorCodes = new ErrorCodes();
    2385:  ^
    2386:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2387:  private final ErrorCodes errorCodes = new ErrorCodes();
    2388:  ^
    2389:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2390:  private final ErrorCodes errorCodes = new ErrorCodes();
    2391:  ^
    2392:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2393:  private final ErrorCodes errorCodes = new ErrorCodes();
    2394:  ^
    2395:  (19:03:40) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.jar (1 source file):
    2396:  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
    2397:  import static org.openqa.selenium.remote.ErrorCodes.METHOD_NOT_ALLOWED;
    2398:  ^
    2399:  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
    2400:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.SUCCESS);
    2401:  ^
    2402:  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
    2403:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2404:  ^
    2405:  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
    2406:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2407:  ^
    2408:  (19:03:40) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/json/JsonTest.jar (1 source file):
    2409:  java/test/org/openqa/selenium/json/JsonTest.java:430: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2410:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2411:  ^
    2412:  java/test/org/openqa/selenium/json/JsonTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2413:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2414:  ^
    2415:  java/test/org/openqa/selenium/json/JsonTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2416:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(32));
    ...
    
    2933:  dotnet/test/common/Interactions/BasicKeyboardInterfaceTest.cs(309,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2934:  dotnet/test/common/Interactions/BasicKeyboardInterfaceTest.cs(336,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2935:  (19:05:44) �[32m[14,387 / 14,830]�[0m 1725 / 2167 tests;�[0m Testing //java/test/org/openqa/selenium:ClickTest-firefox-beta; 114s remote, remote-cache ... (50 actions, 22 running)
    2936:  (19:05:51) �[32m[14,388 / 14,830]�[0m 1726 / 2167 tests;�[0m Testing //java/test/org/openqa/selenium:ClickTest-firefox-beta; 121s remote, remote-cache ... (50 actions, 23 running)
    2937:  (19:05:51) �[32mINFO: �[0mFrom Compiling CorrectEventFiringTest-edge:
    2938:  dotnet/test/common/CorrectEventFiringTest.cs(248,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2939:  (19:05:56) �[32m[14,405 / 14,841]�[0m 1732 / 2167 tests;�[0m Testing //java/test/org/openqa/selenium:ClickTest-firefox-beta; 126s remote, remote-cache ... (50 actions, 26 running)
    2940:  (19:05:57) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium:ClickTest-firefox-beta (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/ClickTest-firefox-beta/test.log)
    2941:  �[31m�[1mFAILED: �[0m//java/test/org/openqa/selenium:ClickTest-firefox-beta (Summary)
    2942:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/ClickTest-firefox-beta/test.log
    2943:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/ClickTest-firefox-beta/test_attempts/attempt_1.log
    2944:  (19:05:57) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium:ClickTest-firefox-beta:
    2945:  ==================== Test output for //java/test/org/openqa/selenium:ClickTest-firefox-beta:
    2946:  Failures: 1
    2947:  1) testShouldBeAbleToClickOnAnElementInFrameGreaterThanTwoViewports() (org.openqa.selenium.ClickTest)
    2948:  org.openqa.selenium.TimeoutException: Expected condition failed: waiting for title to be "clicks". Current title: "This page has iframes" (tried for 10 second(s) with 500 milliseconds interval)
    ...
    
    2955:  at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228)
    2956:  at org.openqa.selenium.testing.SeleniumExtension.waitUntil(SeleniumExtension.java:240)
    2957:  at org.openqa.selenium.ClickTest.testShouldBeAbleToClickOnAnElementInFrameGreaterThanTwoViewports(ClickTest.java:282)
    2958:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChCgHfMQ0UNCiqLjEC0JFA-PEgdkZWZhdWx0GiUKIGKythvaYjDfNvuRKL9BnVqTkguWoQtfCH-a80VktCyhEJ8D
    2959:  ================================================================================
    2960:  ==================== Test output for //java/test/org/openqa/selenium:ClickTest-firefox-beta:
    2961:  Failures: 1
    2962:  1) testShouldBeAbleToClickOnAnElementInFrameGreaterThanTwoViewports() (org.openqa.selenium.ClickTest)
    2963:  org.openqa.selenium.TimeoutException: Expected condition failed: waiting for title to be "clicks". Current title: "This page has iframes" (tried for 10 second(s) with 500 milliseconds interval)
    ...
    
    2967:  Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 134.0, moz:accessibilityChecks: false, moz:buildID: 20241204091850, moz:debuggerAddress: 127.0.0.1:7055, moz:geckodriverVersion: 0.35.0, moz:headless: false, moz:platformVersion: 6.1.0-28-cloud-amd64, moz:processID: 8089, moz:profile: /tmp/rust_mozprofile3Wk0ze, moz:shutdownTimeout: 60000, moz:webdriverClick: true, moz:windowless: false, pageLoadStrategy: normal, platformName: linux, proxy: Proxy(), se:cdp: ws://127.0.0.1:7055/devtool..., se:cdpVersion: 85.0, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, userAgent: Mozilla/5.0 (X11; Linux x86..., webSocketUrl: ws://127.0.0.1:7055/session...}
    2968:  Session ID: 885e7cdd-7f00-406e-8fe7-d080f678b7af
    2969:  at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:84)
    2970:  at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228)
    2971:  at org.openqa.selenium.testing.SeleniumExtension.waitUntil(SeleniumExtension.java:240)
    2972:  at org.openqa.selenium.ClickTest.testShouldBeAbleToClickOnAnElementInFrameGreaterThanTwoViewports(ClickTest.java:282)
    2973:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChCgHfMQ0UNCiqLjEC0JFA-PEgdkZWZhdWx0GiUKIGKythvaYjDfNvuRKL9BnVqTkguWoQtfCH-a80VktCyhEJ8D
    2974:  ================================================================================
    2975:  (19:06:01) �[32m[14,407 / 14,841]�[0m 1734 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 69s remote, remote-cache ... (50 actions, 28 running)
    2976:  (19:06:06) �[32m[14,408 / 14,841]�[0m 1735 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 74s remote, remote-cache ... (50 actions, 30 running)
    2977:  (19:06:11) �[32m[14,416 / 14,846]�[0m 1738 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 79s remote, remote-cache ... (50 actions, 33 running)
    2978:  (19:06:16) �[32m[14,423 / 14,846]�[0m 1745 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 85s remote, remote-cache ... (50 actions, 37 running)
    2979:  (19:06:21) �[32m[14,433 / 14,849]�[0m 1751 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 90s remote, remote-cache ... (50 actions, 36 running)
    2980:  (19:06:27) �[32m[14,434 / 14,849]�[0m 1752 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 95s remote, remote-cache ... (50 actions, 40 running)
    2981:  (19:06:36) �[32m[14,438 / 14,849]�[0m 1756 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 104s remote, remote-cache ... (50 actions, 40 running)
    2982:  (19:06:41) �[32m[14,457 / 14,860]�[0m 1764 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 109s remote, remote-cache ... (50 actions, 39 running)
    2983:  (19:06:44) �[32mINFO: �[0mFrom Compiling Interactions/BasicMouseInterfaceTest-chrome:
    2984:  dotnet/test/common/Interactions/BasicMouseInterfaceTest.cs(133,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2985:  dotnet/test/common/Interactions/BasicMouseInterfaceTest.cs(147,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2986:  dotnet/test/common/Interactions/BasicMouseInterfaceTest.cs(162,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2987:  (19:06:46) �[32m[14,498 / 14,895]�[0m 1770 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 114s remote, remote-cache ... (50 actions, 38 running)
    2988:  (19:06:52) �[32m[14,505 / 14,900]�[0m 1772 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 120s remote, remote-cache ... (50 actions, 40 running)
    2989:  (19:06:57) �[32m[14,528 / 14,917]�[0m 1778 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 125s remote, remote-cache ... (50 actions, 41 running)
    2990:  (19:07:03) �[32m[14,531 / 14,917]�[0m 1781 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 131s remote, remote-cache ... (50 actions, 42 running)
    2991:  (19:07:08) �[32m[14,584 / 14,963]�[0m 1788 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 136s remote, remote-cache ... (50 actions, 41 running)
    2992:  (19:07:11) �[32mINFO: �[0mFrom Compiling JavascriptEnabledBrowserTest-edge:
    2993:  dotnet/test/common/JavascriptEnabledBrowserTest.cs(116,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2994:  dotnet/test/common/JavascriptEnabledBrowserTest.cs(120,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2995:  dotnet/test/common/JavascriptEnabledBrowserTest.cs(131,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2996:  dotnet/test/common/JavascriptEnabledBrowserTest.cs(141,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    2997:  (19:07:13) �[32m[14,616 / 14,982]�[0m 1801 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 141s remote, remote-cache ... (50 actions, 40 running)
    2998:  (19:07:18) �[32m[14,619 / 14,982]�[0m 1804 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 147s remote, remote-cache ... (50 actions, 41 running)
    2999:  (19:07:24) �[32m[14,622 / 14,982]�[0m 1807 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 152s remote, remote-cache ... (50 actions, 42 running)
    3000:  (19:07:29) �[32m[14,637 / 14,994]�[0m 1810 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 157s remote, remote-cache ... (50 actions, 42 running)
    3001:  (19:07:30) �[32mINFO: �[0mFrom Compiling Interactions/CombinedInputActionsTest-chrome:
    3002:  dotnet/test/common/Interactions/CombinedInputActionsTest.cs(295,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3003:  dotnet/test/common/Interactions/CombinedInputActionsTest.cs(306,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3004:  dotnet/test/common/Interactions/CombinedInputActionsTest.cs(315,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3005:  (19:07:35) �[32m[14,646 / 15,000]�[0m 1813 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 163s remote, remote-cache ... (50 actions running)
    ...
    
    3095:  dotnet/test/common/TypingTest.cs(556,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3096:  dotnet/test/common/TypingTest.cs(567,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3097:  dotnet/test/common/TypingTest.cs(578,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3098:  dotnet/test/common/TypingTest.cs(599,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3099:  dotnet/test/common/TypingTest.cs(608,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3100:  dotnet/test/common/TypingTest.cs(627,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3101:  dotnet/test/common/TypingTest.cs(650,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3102:  dotnet/test/common/TypingTest.cs(735,20): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3103:  (19:07:40) �[32m[14,715 / 15,061]�[0m 1823 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 168s remote, remote-cache ... (50 actions, 49 running)
    ...
    
    3124:  dotnet/test/common/Interactions/CombinedInputActionsTest.cs(306,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3125:  dotnet/test/common/Interactions/CombinedInputActionsTest.cs(315,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3126:  (19:07:44) �[32mINFO: �[0mFrom Compiling GetMultipleAttributeTest-edge:
    3127:  dotnet/test/common/GetMultipleAttributeTest.cs(32,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3128:  dotnet/test/common/GetMultipleAttributeTest.cs(40,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3129:  dotnet/test/common/GetMultipleAttributeTest.cs(48,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3130:  dotnet/test/common/GetMultipleAttributeTest.cs(56,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3131:  dotnet/test/common/GetMultipleAttributeTest.cs(64,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3132:  (19:07:45) �[32m[14,912 / 15,218]�[0m 1860 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 173s remote, remote-cache ... (49 actions, 47 running)
    3133:  (19:07:50) �[32m[14,941 / 15,237]�[0m 1871 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 178s remote, remote-cache ... (50 actions, 48 running)
    3134:  (19:07:56) �[32m[14,952 / 15,237]�[0m 1882 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 184s remote, remote-cache ... (50 actions, 48 running)
    ...
    
    3139:  (19:08:01) �[32mINFO: �[0mFrom Compiling SelectElementHandlingTest-edge:
    3140:  dotnet/test/common/SelectElementHandlingTest.cs(116,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3141:  dotnet/test/common/SelectElementHandlingTest.cs(118,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3142:  dotnet/test/common/SelectElementHandlingTest.cs(126,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3143:  (19:08:01) �[32mINFO: �[0mFrom Compiling SelectElementHandlingTest-firefox:
    3144:  dotnet/test/common/SelectElementHandlingTest.cs(116,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3145:  dotnet/test/common/SelectElementHandlingTest.cs(118,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3146:  dotnet/test/common/SelectElementHandlingTest.cs(126,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3147:  (19:08:01) �[32m[14,985 / 15,247]�[0m 1905 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 189s remote, remote-cache ... (50 actions, 48 running)
    ...
    
    3232:  (19:08:05) �[32mINFO: �[0mFrom Compiling ElementSelectingTest-chrome:
    3233:  dotnet/test/common/ElementSelectingTest.cs(247,20): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3234:  (19:08:05) �[32mINFO: �[0mFrom Compiling TextHandlingTest-edge:
    3235:  dotnet/test/common/TextHandlingTest.cs(197,31): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3236:  dotnet/test/common/TextHandlingTest.cs(208,32): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3237:  dotnet/test/common/TextHandlingTest.cs(357,30): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3238:  (19:08:05) �[32mINFO: �[0mFrom Compiling ElementSelectingTest-firefox:
    3239:  dotnet/test/common/ElementSelectingTest.cs(247,20): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3240:  (19:08:06) �[32m[15,136 / 15,339]�[0m 1964 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote; 194s remote, remote-cache ... (50 actions, 48 running)
    3241:  (19:08:11) �[32m[15,178 / 15,357]�[0m 1988 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-remote; 128s remote, remote-cache ... (50 actions, 49 running)
    3242:  (19:08:14) �[32mINFO: �[0mFrom Compiling ShadowRootHandlingTest-firefox:
    3243:  dotnet/test/common/ShadowRootHandlingTest.cs(46,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3244:  (19:08:14) �[32mINFO: �[0mFrom Compiling ShadowRootHandlingTest-edge:
    3245:  dotnet/test/common/ShadowRootHandlingTest.cs(46,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3246:  (19:08:15) �[32mINFO: �[0mFrom Compiling ShadowRootHandlingTest-chrome:
    3247:  dotnet/test/common/ShadowRootHandlingTest.cs(46,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3248:  (19:08:15) �[32mINFO: �[0mFrom Compiling StaleElementReferenceTest-edge:
    3249:  dotnet/test/common/StaleElementReferenceTest.cs(52,52): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3250:  (19:08:16) �[32m[15,291 / 15,428]�[0m 2030 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-remote; 133s remote, remote-cache ... (50 actions, 47 running)
    ...
    
    3282:  dotnet/test/common/FrameSwitchingTest.cs(104,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3283:  dotnet/test/common/FrameSwitchingTest.cs(113,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3284:  dotnet/test/common/FrameSwitchingTest.cs(131,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3285:  dotnet/test/common/FrameSwitchingTest.cs(157,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3286:  (19:08:17) �[32mINFO: �[0mFrom Compiling SelectElementHandlingTest-chrome:
    3287:  dotnet/test/common/SelectElementHandlingTest.cs(116,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3288:  dotnet/test/common/SelectElementHandlingTest.cs(118,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3289:  dotnet/test/common/SelectElementHandlingTest.cs(126,25): warning CS0618: 'IWebElement.GetAttribute(string)' is obsolete: 'Use GetDomAttribute(string attributeName) or GetDomProperty(string propertyName). GetAttribute(string attributeName) will be removed in Selenium 6.'
    3290:  (19:08:23) �[32m[15,359 / 15,482]�[0m 2044 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-remote; 140s remote, remote-cache ... (50 actions running)
    3291:  (19:08:28) �[32m[15,381 / 15,482]�[0m 2067 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-remote; 145s remote, remote-cache ... (50 actions running)
    3292:  (19:08:33) �[32m[15,448 / 15,491]�[0m 2124 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/bidi/script:ScriptCommandsTest-remote; 150s remote, remote-cache ... (43 actions running)
    3293:  (19:08:39) �[32m[15,460 / 15,491]�[0m 2136 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 68s remote, remote-cache ... (31 actions running)
    3294:  (19:08:45) �[32m[15,467 / 15,491]�[0m 2144 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 74s remote, remote-cache ... (24 actions running)
    3295:  (19:08:51) �[32m[15,472 / 15,491]�[0m 2148 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox-beta-remote; 80s remote, remote-cache ... (19 actions running)
    3296:  (19:08:57) �[32m[15,475 / 15,491]�[0m 2152 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox-beta-remote; 86s remote, remote-cache ... (16 actions running)
    3297:  (19:09:06) �[32m[15,478 / 15,491]�[0m 2154 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 80s remote, remote-cache ... (13 actions running)
    3298:  (19:09:16) �[32m[15,481 / 15,491]�[0m 2157 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 90s remote, remote-cache ... (10 actions running)
    3299:  (19:09:26) �[32m[15,482 / 15,491]�[0m 2158 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 100s remote, remote-cache ... (9 actions running)
    3300:  (19:09:32) �[32m[15,482 / 15,491]�[0m 2158 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 106s remote, remote-cache ... (9 actions running)
    3301:  (19:09:38) �[32m[15,482 / 15,491]�[0m 2159 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 111s remote, remote-cache ... (9 actions running)
    3302:  (19:09:46) �[32m[15,484 / 15,491]�[0m 2160 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 120s remote, remote-cache ... (7 actions running)
    3303:  (19:09:51) �[32m[15,484 / 15,491]�[0m 2160 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 125s remote, remote-cache ... (7 actions running)
    3304:  (19:10:21) �[32m[15,484 / 15,491]�[0m 2160 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 155s remote, remote-cache ... (7 actions running)
    3305:  (19:10:26) �[32m[15,485 / 15,491]�[0m 2161 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 160s remote, remote-cache ... (6 actions running)
    3306:  (19:10:35) �[32m[15,485 / 15,491]�[0m 2161 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 169s remote, remote-cache ... (6 actions running)
    3307:  (19:10:55) �[32m[15,485 / 15,491]�[0m 2162 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-edge-remote; 189s remote, remote-cache ... (6 actions running)
    3308:  (19:11:01) �[32m[15,488 / 15,491]�[0m 2164 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 170s remote, remote-cache ... (3 actions running)
    3309:  (19:11:12) �[32m[15,488 / 15,491]�[0m 2164 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 180s remote, remote-cache ... (3 actions running)
    3310:  (19:11:36) �[32m[15,488 / 15,491]�[0m 2165 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 205s remote, remote-cache ... (3 actions running)
    3311:  (19:11:46) �[32m[15,489 / 15,491]�[0m 2165 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest-remote; 215s remote, remote-cache ... (2 actions running)
    3312:  (19:11:56) �[32m[15,490 / 15,491]�[0m 2166 / 2167 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/router:StressTest; 224s remote, remote-cache
    3313:  (19:11:57) �[32mINFO: �[0mFound 2167 test targets...
    3314:  (19:11:58) �[32mINFO: �[0mElapsed time: 664.507s, Critical Path: 272.77s
    3315:  (19:11:58) �[32mINFO: �[0m14732 processes: 7018 remote cache hit, 7308 internal, 49 local, 357 remote.
    3316:  (19:11:58) �[32mINFO: �[0mBuild completed, 1 test FAILED, 14732 total actions
    ...
    
    3430:  //dotnet/test/common:ElementFindingTest-edge                    �[0m�[32m(cached) PASSED�[0m in 32.9s
    3431:  //dotnet/test/common:ElementFindingTest-firefox                 �[0m�[32m(cached) PASSED�[0m in 42.7s
    3432:  //dotnet/test/common:ElementPropertyTest-chrome                 �[0m�[32m(cached) PASSED�[0m in 4.3s
    3433:  //dotnet/test/common:ElementPropertyTest-edge                   �[0m�[32m(cached) PASSED�[0m in 7.3s
    3434:  //dotnet/test/common:ElementPropertyTest-firefox                �[0m�[32m(cached) PASSED�[0m in 8.4s
    3435:  //dotnet/test/common:ElementSelectingTest-chrome                �[0m�[32m(cached) PASSED�[0m in 10.1s
    3436:  //dotnet/test/common:ElementSelectingTest-edge                  �[0m�[32m(cached) PASSED�[0m in 13.5s
    3437:  //dotnet/test/common:ElementSelectingTest-firefox               �[0m�[32m(cached) PASSED�[0m in 25.5s
    3438:  //dotnet/test/common:ErrorsTest-chrome                          �[0m�[32m(cached) PASSED�[0m in 4.4s
    3439:  //dotnet/test/common:ErrorsTest-edge                            �[0m�[32m(cached) PASSED�[0m in 7.8s
    3440:  //dotnet/test/common:ErrorsTest-firefox                         �[0m�[32m(cached) PASSED�[0m in 9.7s
    ...
    
    3787:  //java/test/org/openqa/selenium:ElementFindingTest-edge         �[0m�[32m(cached) PASSED�[0m in 92.0s
    3788:  //java/test/org/openqa/selenium:ElementFindingTest-firefox-beta �[0m�[32m(cached) PASSED�[0m in 30.5s
    3789:  //java/test/org/openqa/selenium:ElementFindingTest-spotbugs     �[0m�[32m(cached) PASSED�[0m in 10.2s
    3790:  //java/test/org/openqa/selenium:ElementSelectingTest            �[0m�[32m(cached) PASSED�[0m in 24.2s
    3791:  //java/test/org/openqa/selenium:ElementSelectingTest-chrome     �[0m�[32m(cached) PASSED�[0m in 11.0s
    3792:  //java/test/org/openqa/selenium:ElementSelectingTest-edge       �[0m�[32m(cached) PASSED�[0m in 25.1s
    3793:  //java/test/org/openqa/selenium:ElementSelectingTest-firefox-beta �[0m�[32m(cached) PASSED�[0m in 23.3s
    3794:  //java/test/org/openqa/selenium:ElementSelectingTest-spotbugs   �[0m�[32m(cached) PASSED�[0m in 7.2s
    3795:  //java/test/org/openqa/selenium:ErrorsTest                      �[0m�[32m(cached) PASSED�[0m in 10.6s
    3796:  //java/test/org/openqa/selenium:ErrorsTest-chrome               �[0m�[32m(cached) PASSED�[0m in 7.5s
    3797:  //java/test/org/openqa/selenium:ErrorsTest-edge                 �[0m�[32m(cached) PASSED�[0m in 8.4s
    3798:  //java/test/org/openqa/selenium:ErrorsTest-firefox-beta         �[0m�[32m(cached) PASSED�[0m in 13.1s
    3799:  //java/test/org/openqa/selenium:ErrorsTest-spotbugs             �[0m�[32m(cached) PASSED�[0m in 6.7s
    ...
    
    4365:  //java/test/org/openqa/selenium/os:ExternalProcessTest          �[0m�[32m(cached) PASSED�[0m in 2.2s
    4366:  //java/test/org/openqa/selenium/os:ExternalProcessTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 9.0s
    4367:  //java/test/org/openqa/selenium/os:OsProcessTest                �[0m�[32m(cached) PASSED�[0m in 3.1s
    4368:  //java/test/org/openqa/selenium/os:OsProcessTest-spotbugs       �[0m�[32m(cached) PASSED�[0m in 7.9s
    4369:  //java/test/org/openqa/selenium/remote:AugmenterTest            �[0m�[32m(cached) PASSED�[0m in 5.5s
    4370:  //java/test/org/openqa/selenium/remote:AugmenterTest-spotbugs   �[0m�[32m(cached) PASSED�[0m in 9.3s
    4371:  //java/test/org/openqa/selenium/remote:DesiredCapabilitiesTest  �[0m�[32m(cached) PASSED�[0m in 2.0s
    4372:  //java/test/org/openqa/selenium/remote:DesiredCapabilitiesTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 9.2s
    4373:  //java/test/org/openqa/selenium/remote:ErrorCodecTest           �[0m�[32m(cached) PASSED�[0m in 1.9s
    4374:  //java/test/org/openqa/selenium/remote:ErrorCodecTest-spotbugs  �[0m�[32m(cached) PASSED�[0m in 7.6s
    4375:  //java/test/org/openqa/selenium/remote:ErrorHandlerTest         �[0m�[32m(cached) PASSED�[0m in 2.6s
    4376:  //java/test/org/openqa/selenium/remote:ErrorHandlerTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 9.4s
    ...
    
    4957:  //py:unit-test/unit/selenium/webdriver/chrome/chrome_options_tests.py �[0m�[32m(cached) PASSED�[0m in 2.9s
    4958:  //py:unit-test/unit/selenium/webdriver/common/cdp_module_fallback_tests.py �[0m�[32m(cached) PASSED�[0m in 2.6s
    4959:  //py:unit-test/unit/selen...

    @VietND96 VietND96 requested a review from joerg1985 December 19, 2024 03:06
    Comment on lines 207 to 227
    public String getBrowserVersion() {
    return slots.parallelStream()
    .map(slot -> slot.getStereotype().getBrowserVersion())
    .filter(Objects::nonNull)
    .min(NodeStatus::semVerComparator)
    .orElse("");
    }

    public static int semVerComparator(String v1, String v2) {
    // Custom semver comparator with empty strings first
    if (v1.isEmpty() && v2.isEmpty()) return 0;
    if (v1.isEmpty()) return -1; // Empty string comes first
    if (v2.isEmpty()) return 1;

    String[] parts1 = v1.split("\\.");
    String[] parts2 = v2.split("\\.");

    int maxLength = Math.max(parts1.length, parts2.length);
    for (int i = 0; i < maxLength; i++) {
    String part1 = i < parts1.length ? parts1[i] : "0";
    String part2 = i < parts2.length ? parts2[i] : part1;
    Copy link
    Member

    Choose a reason for hiding this comment

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

    This code shouldn't be here. It probably belongs to the DefaultSlotMatcher.

    Copy link
    Member Author

    Choose a reason for hiding this comment

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

    I moved it to CapabilitiesComparator for reusable. Since this is used for both sorting in selector and slot matcher

    Comment on lines 56 to 60
    // Then sort by stereotype browserVersion (descending order). SemVer comparison with
    // considering empty value at first.
    .thenComparing(
    Comparator.comparing(
    NodeStatus::getBrowserVersion, NodeStatus::semVerComparator))
    Copy link
    Member

    Choose a reason for hiding this comment

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

    The semVerComparator returns true or false. This is more suitable for a filter. Which is done below, through the matcher.

    Copy link
    Member Author

    Choose a reason for hiding this comment

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

    This is still needed since multiple matches returned from SlotMatcher should be sorted to move the latest version to top

    @VietND96 VietND96 force-pushed the grid-slot-matcher branch 2 times, most recently from 744678d to 00449d7 Compare December 19, 2024 18:54
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    2 participants