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] Unable to find session with ID when Node drain-after-session-count #15370

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

Conversation

VietND96
Copy link
Member

@VietND96 VietND96 commented Mar 4, 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

LocalSessionMap starts removing sessions on the event NodeRemovedEvent
Check all places where Eventbus fires that event, there is NodeServer at shutdownHook
Not sure when the httpd server gets restarted due to a glitch (where LocalNode might still be running), this event causes LocalSessionMap removing the session unexpectedly which leads to the issue. -> Do we need to remove this shutdownHook in NodeServer? Let the LocalNode do the drain() procedure for shutdown.
Currently, I updated it to node.drain() to trigger the LocalNode drain(), where updating Node status to DRAINING and waiting for pending tasks to be completed before shutting down completely.

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


Description

  • Replaced NodeRemovedEvent with node.drain() in NodeServer shutdown hook.

  • Ensures proper session handling during node shutdown.

  • Prevents unexpected session removal during server glitches or restarts.


Changes walkthrough 📝

Relevant files
Bug fix
NodeServer.java
Updated NodeServer shutdown hook for graceful shutdown     

java/src/org/openqa/selenium/grid/node/httpd/NodeServer.java

  • Removed NodeRemovedEvent firing in the shutdown hook.
  • Added node.drain() call to handle node draining during shutdown.
  • Improved session management and shutdown behavior.
  • +1/-3     

    Need help?
  • Type /help how to ... in the comments thread for any questions about Qodo Merge usage.
  • Check out the documentation for more information.
  • Signed-off-by: Viet Nguyen Duc <nguyenducviet4496@gmail.com>
    Copy link
    Contributor

    qodo-merge-pro bot commented Mar 4, 2025

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

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

    Race Condition

    The node field might be null when the shutdown hook thread runs since it's initialized after the hook is defined. Consider moving the shutdown hook creation after node initialization.

    private final Thread shutdownHook = new Thread(() -> node.drain());

    @VietND96 VietND96 requested review from diemol and joerg1985 March 4, 2025 07:52
    Copy link
    Contributor

    qodo-merge-pro bot commented Mar 4, 2025

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Fix potential null pointer access
    Suggestion Impact:The commit addressed the null pointer issue by modifying the shutdown hook implementation. Instead of directly calling node.drain() which could cause a NullPointerException, it changed the implementation to fire a NodeRemovedEvent through the bus. This is a different approach than suggested but solves the same underlying issue.

    code diff:

    -  private final Thread shutdownHook = new Thread(() -> node.drain());
    +  private final Thread shutdownHook =
    +      new Thread(() -> bus.fire(new NodeRemovedEvent(node.getStatus())));

    The shutdown hook initializes with a lambda that uses the node field before it's
    set, which could cause a NullPointerException. Move the shutdown hook
    initialization after the node field is populated.

    java/src/org/openqa/selenium/grid/node/httpd/NodeServer.java [77-79]

     private Node node;
     private EventBus bus;
    -private final Thread shutdownHook = new Thread(() -> node.drain());
    +private Thread shutdownHook;

    [Suggestion has been applied]

    Suggestion importance[1-10]: 9

    __

    Why: The suggestion correctly identifies a critical issue where the shutdown hook lambda accesses the 'node' field before it's initialized, which could cause a NullPointerException. Moving the shutdown hook initialization after node assignment would prevent this potential crash.

    High
    • Update

    Copy link
    Contributor

    qodo-merge-pro bot commented Mar 4, 2025

    CI Feedback 🧐

    (Feedback updated until commit df987e2)

    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: test-bidi-browsingcontext-inspector-test.js

    Failure summary:

    The action failed due to multiple test failures in the BiDi (Bidirectional) API implementation
    across different language bindings:

    1. JavaScript tests failed with the error: AssertionError [ERR_ASSERTION]: [] == null in the "can
    listen to browsing context destroyed event" test for both Chrome and Firefox.

    2. Ruby tests failed with "tab crashed" errors in Chrome tests, specifically in:
    - finds by class
    name test
    - is able to pass boolean arguments test

    3. Python tests failed with a KeyError: 'Page.frameStartedNavigating' in the CDP event parsing.

    4. Java tests failed in BiDi-related functionality, including browsing context tests.

    These failures appear to be related to browser compatibility issues with the BiDi protocol
    implementation.

    Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    947:  Package 'php-symfony-asset' is not installed, so not removed
    948:  Package 'php-symfony-asset-mapper' is not installed, so not removed
    949:  Package 'php-symfony-browser-kit' is not installed, so not removed
    950:  Package 'php-symfony-clock' is not installed, so not removed
    951:  Package 'php-symfony-debug-bundle' is not installed, so not removed
    952:  Package 'php-symfony-doctrine-bridge' is not installed, so not removed
    953:  Package 'php-symfony-dom-crawler' is not installed, so not removed
    954:  Package 'php-symfony-dotenv' is not installed, so not removed
    955:  Package 'php-symfony-error-handler' is not installed, so not removed
    ...
    
    1141:  Package 'php-uopz-all-dev' is not installed, so not removed
    1142:  Package 'php8.3-uploadprogress' is not installed, so not removed
    1143:  Package 'php-uploadprogress-all-dev' is not installed, so not removed
    1144:  Package 'php8.3-uuid' is not installed, so not removed
    1145:  Package 'php-uuid-all-dev' is not installed, so not removed
    1146:  Package 'php-validate' is not installed, so not removed
    1147:  Package 'php-vlucas-phpdotenv' is not installed, so not removed
    1148:  Package 'php-voku-portable-ascii' is not installed, so not removed
    1149:  Package 'php-wmerrors' is not installed, so not removed
    ...
    
    1801:  (02:34:41) �[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
    1802:  (02:34:41) �[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
    1803:  (02:34:41) �[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
    1804:  (02:34:41) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398: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
    1805:  (02:34:41) �[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
    1806:  (02:34:41) �[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
    1807:  (02:34:41) �[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
    1808:  (02:34:41) �[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
    1809:  (02:34:41) �[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
    ...
    
    2069:  external/protobuf+/src/google/protobuf/compiler/java/full/message.cc:807:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<const google::protobuf::FieldDescriptor*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
    2070:  807 |     for (int i = 0; i < map_fields.size(); ++i) {
    2071:  |                     ~~^~~~~~~~~~~~~~~~~~~
    2072:  (02:35:04) �[32mINFO: �[0mFrom Building external/protobuf+/java/core/libcore.jar (43 source files, 1 source jar) [for tool]:
    2073:  external/protobuf+/java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java:28: warning: [dep-ann] deprecated item is not annotated with @Deprecated
    2074:  public class RepeatedFieldBuilderV3<
    2075:  ^
    2076:  (02:35:06) �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (70 source files):
    2077:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2078:  private final ErrorCodes errorCodes;
    2079:  ^
    2080:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2081:  this.errorCodes = new ErrorCodes();
    2082:  ^
    2083:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2084:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    2085:  ^
    2086:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2087:  ErrorCodes errorCodes = new ErrorCodes();
    2088:  ^
    2089:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2090:  ErrorCodes errorCodes = new ErrorCodes();
    2091:  ^
    2092:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2093:  response.setStatus(ErrorCodes.SUCCESS);
    2094:  ^
    2095:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2096:  response.setState(ErrorCodes.SUCCESS_STRING);
    2097:  ^
    2098:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2099:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    2100:  ^
    2101:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2102:  new ErrorCodes().getExceptionType((String) rawError);
    2103:  ^
    2104:  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
    2105:  private final ErrorCodes errorCodes = new ErrorCodes();
    2106:  ^
    2107:  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
    2108:  private final ErrorCodes errorCodes = new ErrorCodes();
    2109:  ^
    2110:  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
    2111:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    2112:  ^
    2113:  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
    2114:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2115:  ^
    2116:  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
    2117:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2118:  ^
    2119:  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
    2120:  response.setStatus(ErrorCodes.SUCCESS);
    2121:  ^
    2122:  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
    2123:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2124:  ^
    2125:  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
    2126:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2127:  ^
    2128:  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
    2129:  private final ErrorCodes errorCodes = new ErrorCodes();
    2130:  ^
    2131:  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
    2132:  private final ErrorCodes errorCodes = new ErrorCodes();
    2133:  ^
    2134:  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
    2135:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2136:  ^
    2137:  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
    2138:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2139:  ^
    2140:  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
    2141:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    2150:  Build Script Warning: bzip2-1.0.8/compress.c:243:19: warning: variable ‘nBytes’ set but not used [-Wunused-but-set-variable]
    2151:  Build Script Warning:   243 |    Int32 nGroups, nBytes;
    2152:  Build Script Warning:       |                   ^~~~~~
    2153:  (02:35:11) �[32mAnalyzing:�[0m 2156 targets (1610 packages loaded, 60551 targets configured)
    2154:  �[32m[9,558 / 10,451]�[0m 82 / 1545 tests;�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:guard-chrome ... (50 actions, 0 running)
    2155:  (02:35:17) �[32mAnalyzing:�[0m 2156 targets (1617 packages loaded, 60713 targets configured)
    2156:  �[32m[9,571 / 10,538]�[0m 84 / 1545 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 7s remote, remote-cache ... (50 actions, 0 running)
    2157:  (02:35:22) �[32mAnalyzing:�[0m 2156 targets (1617 packages loaded, 60929 targets configured)
    2158:  �[32m[9,594 / 10,697]�[0m 95 / 1584 tests;�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:error-edge; 8s ... (50 actions, 1 running)
    ...
    
    2160:  �[32m[9,614 / 11,036]�[0m 104 / 1695 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:element-firefox-beta-bidi; 9s remote, remote-cache ... (50 actions, 1 running)
    2161:  (02:35:32) �[32mAnalyzing:�[0m 2156 targets (1634 packages loaded, 63037 targets configured)
    2162:  �[32m[9,662 / 11,460]�[0m 131 / 1878 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 12s remote, remote-cache ... (50 actions, 1 running)
    2163:  (02:35:37) �[32mAnalyzing:�[0m 2156 targets (1636 packages loaded, 63198 targets configured)
    2164:  �[32m[9,883 / 11,550]�[0m 192 / 1878 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 17s remote, remote-cache ... (50 actions, 2 running)
    2165:  (02:35:42) �[32mAnalyzing:�[0m 2156 targets (1636 packages loaded, 63228 targets configured)
    2166:  �[32m[10,388 / 11,814]�[0m 284 / 1903 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 22s remote, remote-cache ... (49 actions, 3 running)
    2167:  (02:35:47) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/libsmall-tests-test-lib.jar (5 source files) and running annotation processors (AutoServiceProcessor):
    2168:  java/test/org/openqa/selenium/remote/WebDriverFixture.java:170: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2169:  response.setStatus(new ErrorCodes().toStatus(state, Optional.of(400)));
    2170:  ^
    2171:  (02:35:47) �[32mAnalyzing:�[0m 2156 targets (1636 packages loaded, 63259 targets configured)
    2172:  �[32m[11,113 / 12,288]�[0m 404 / 1934 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 27s remote, remote-cache ... (49 actions, 5 running)
    2173:  (02:35:50) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.jar (1 source file):
    2174:  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
    2175:  import static org.openqa.selenium.remote.ErrorCodes.METHOD_NOT_ALLOWED;
    2176:  ^
    2177:  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
    2178:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.SUCCESS);
    2179:  ^
    2180:  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
    2181:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2182:  ^
    2183:  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
    2184:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2185:  ^
    2186:  (02:35:50) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/json/JsonTest.jar (1 source file):
    2187:  java/test/org/openqa/selenium/json/JsonTest.java:430: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2188:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2189:  ^
    2190:  java/test/org/openqa/selenium/json/JsonTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2191:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2192:  ^
    2193:  java/test/org/openqa/selenium/json/JsonTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2194:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(32));
    2195:  ^
    2196:  (02:35:52) �[32mAnalyzing:�[0m 2156 targets (1636 packages loaded, 63297 targets configured)
    2197:  �[32m[11,503 / 12,613]�[0m 541 / 1973 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 32s remote, remote-cache ... (50 actions, 5 running)
    2198:  (02:35:56) �[31m�[1mFAIL: �[0m//javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-chrome (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/javascript/node/selenium-webdriver/test-bidi-browsingcontext-inspector-test.js-chrome/test_attempts/attempt_1.log)
    2199:  (02:35:57) �[32mAnalyzing:�[0m 2156 targets (1636 packages loaded, 63328 targets configured)
    2200:  �[32m[12,406 / 13,177]�[0m 686 / 2002 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 37s remote, remote-cache ... (50 actions, 9 running)
    2201:  (02:36:00) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/ErrorHandlerTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2202:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:79: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2203:  handler.throwIfResponseFailed(createResponse(ErrorCodes.SUCCESS), 100);
    2204:  ^
    2205:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:85: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2206:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2207:  ^
    2208:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:86: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2209:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2210:  ^
    2211:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:87: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2212:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2213:  ^
    2214:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:88: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2215:  assertThrowsCorrectExceptionType(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2216:  ^
    2217:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:90: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2218:  ErrorCodes.METHOD_NOT_ALLOWED, UnsupportedCommandException.class);
    2219:  ^
    2220:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:92: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2221:  ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2222:  ^
    2223:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:94: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2224:  ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2225:  ^
    2226:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:95: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2227:  assertThrowsCorrectExceptionType(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2228:  ^
    2229:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2230:  Response response = createResponse(ErrorCodes.UNHANDLED_ERROR);
    2231:  ^
    2232:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:120: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2233:  createResponse(ErrorCodes.UNHANDLED_ERROR, "boom"), 123))
    2234:  ^
    2235:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:133: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2236:  createResponse(ErrorCodes.UNHANDLED_ERROR, ImmutableMap.of("message", "boom")),
    2237:  ^
    2238:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:147: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2239:  ErrorCodes.UNHANDLED_ERROR,
    2240:  ^
    2241:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:167: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2242:  ErrorCodes.UNHANDLED_ERROR,
    2243:  ^
    2244:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:193: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2245:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2246:  ^
    2247:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:214: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2248:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2249:  ^
    2250:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:248: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2251:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2252:  ^
    2253:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:280: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2254:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2255:  ^
    2256:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:308: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2257:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2258:  ^
    2259:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:327: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2260:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2261:  ^
    2262:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:355: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2263:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2264:  ^
    2265:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:394: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2266:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2267:  ^
    2268:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:426: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2269:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2270:  ^
    2271:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:435: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2272:  exceptions.put(ErrorCodes.NO_SUCH_SESSION, NoSuchSessionException.class);
    2273:  ^
    2274:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:436: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2275:  exceptions.put(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2276:  ^
    2277:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:437: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2278:  exceptions.put(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2279:  ^
    2280:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:438: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2281:  exceptions.put(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2282:  ^
    2283:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:439: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2284:  exceptions.put(ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2285:  ^
    2286:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:440: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2287:  exceptions.put(ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2288:  ^
    2289:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2290:  exceptions.put(ErrorCodes.UNHANDLED_ERROR, WebDriverException.class);
    2291:  ^
    2292:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:442: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2293:  exceptions.put(ErrorCodes.JAVASCRIPT_ERROR, JavascriptException.class);
    2294:  ^
    2295:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:443: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2296:  exceptions.put(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2297:  ^
    2298:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:444: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2299:  exceptions.put(ErrorCodes.TIMEOUT, TimeoutException.class);
    2300:  ^
    2301:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:445: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2302:  exceptions.put(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2303:  ^
    2304:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:446: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2305:  exceptions.put(ErrorCodes.INVALID_COOKIE_DOMAIN, InvalidCookieDomainException.class);
    2306:  ^
    2307:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:447: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2308:  exceptions.put(ErrorCodes.UNABLE_TO_SET_COOKIE, UnableToSetCookieException.class);
    2309:  ^
    2310:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:448: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2311:  exceptions.put(ErrorCodes.UNEXPECTED_ALERT_PRESENT, UnhandledAlertException.class);
    2312:  ^
    2313:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:449: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2314:  exceptions.put(ErrorCodes.NO_ALERT_PRESENT, NoAlertPresentException.class);
    2315:  ^
    2316:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:450: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2317:  exceptions.put(ErrorCodes.ASYNC_SCRIPT_TIMEOUT, ScriptTimeoutException.class);
    2318:  ^
    2319:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:451: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2320:  exceptions.put(ErrorCodes.INVALID_SELECTOR_ERROR, InvalidSelectorException.class);
    2321:  ^
    2322:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:452: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2323:  exceptions.put(ErrorCodes.SESSION_NOT_CREATED, SessionNotCreatedException.class);
    2324:  ^
    2325:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:453: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2326:  exceptions.put(ErrorCodes.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsException.class);
    2327:  ^
    2328:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2329:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR, InvalidSelectorException.class);
    2330:  ^
    2331:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:455: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2332:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR_RETURN_TYPER, InvalidSelectorException.class);
    2333:  ^
    2334:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:469: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2335:  ? ErrorCodes.INVALID_SELECTOR_ERROR
    2336:  ^
    2337:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:471: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2338:  assertThat(new ErrorCodes().toStatusCode(e)).isEqualTo(expected);
    2339:  ^
    2340:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:483: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2341:  response.setState(new ErrorCodes().toState(status));
    2342:  ^
    2343:  (02:36:00) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/RemotableByTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2344:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2345:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2346:  ^
    2347:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2348:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2349:  ^
    2350:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2351:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2352:  ^
    2353:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2354:  private final ErrorCodes errorCodes = new ErrorCodes();
    2355:  ^
    2356:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2357:  private final ErrorCodes errorCodes = new ErrorCodes();
    2358:  ^
    2359:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2360:  private final ErrorCodes errorCodes = new ErrorCodes();
    2361:  ^
    2362:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2363:  private final ErrorCodes errorCodes = new ErrorCodes();
    ...
    
    2424:  dotnet/src/webdriver/DevTools/v131/V131Network.cs(149,29): warning CS8601: Possible null reference assignment.
    2425:  dotnet/src/webdriver/DevTools/v131/V131Network.cs(194,29): warning CS8601: Possible null reference assignment.
    2426:  dotnet/src/webdriver/DevTools/v131/V131Network.cs(235,92): warning CS8601: Possible null reference assignment.
    2427:  dotnet/src/webdriver/DevTools/v131/V131Network.cs(292,121): warning CS8601: Possible null reference assignment.
    2428:  dotnet/src/webdriver/DevTools/v131/V131Network.cs(320,94): warning CS8601: Possible null reference assignment.
    2429:  (02:36:16) �[32mINFO: �[0mAnalyzed 2156 targets (1636 packages loaded, 63480 targets configured).
    2430:  (02:36:17) �[32m[13,844 / 14,597]�[0m 1194 / 2156 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 57s remote, remote-cache ... (47 actions, 10 running)
    2431:  (02:36:22) �[31m�[1mFAIL: �[0m//javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-chrome (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/javascript/node/selenium-webdriver/test-bidi-browsingcontext-inspector-test.js-chrome/test.log)
    2432:  �[31m�[1mFAILED: �[0m//javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-chrome (Summary)
    ...
    
    2443:  ✔ can listen to dom content loaded event (159ms)
    2444:  ✔ can listen to browsing context loaded event (128ms)
    2445:  - can listen to navigation started event
    2446:  - can listen to fragment navigated event
    2447:  - can listen to user prompt opened event
    2448:  - can listen to user prompt closed event
    2449:  4 passing (9s)
    2450:  4 pending
    2451:  1 failing
    2452:  1) [chrome]
    2453:  Browsing Context Inspector
    2454:  can listen to browsing context destroyed event:
    2455:  AssertionError [ERR_ASSERTION]: [] == null
    ...
    
    2467:  ✔ can listen to dom content loaded event (120ms)
    2468:  ✔ can listen to browsing context loaded event (122ms)
    2469:  - can listen to navigation started event
    2470:  - can listen to fragment navigated event
    2471:  - can listen to user prompt opened event
    2472:  - can listen to user prompt closed event
    2473:  4 passing (8s)
    2474:  4 pending
    2475:  1 failing
    2476:  1) [chrome]
    2477:  Browsing Context Inspector
    2478:  can listen to browsing context destroyed event:
    2479:  AssertionError [ERR_ASSERTION]: [] == null
    2480:  at Context.<anonymous> (test/bidi/browsingcontext_inspector_test.js:71:16)
    2481:  at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    2482:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChCgHfMQ0UNCiqLjEC0JFA-PEgdkZWZhdWx0GiUKIHxxQqeFulDvfcz95d3nBl6iHsH7jZuvxxbQ1Z69Vfq1EJ8D
    2483:  ================================================================================
    2484:  (02:36:22) �[32m[14,278 / 14,907]�[0m 1338 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 62s remote, remote-cache ... (47 actions, 6 running)
    2485:  (02:36:27) �[32m[14,601 / 15,062]�[0m 1507 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 67s remote, remote-cache ... (49 actions, 3 running)
    2486:  (02:36:32) �[32m[14,857 / 15,269]�[0m 1653 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 72s remote, remote-cache ... (50 actions, 4 running)
    2487:  (02:36:37) �[32m[14,918 / 15,341]�[0m 1697 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 77s remote, remote-cache ... (48 actions, 5 running)
    2488:  (02:36:42) �[32m[14,964 / 15,385]�[0m 1726 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 82s remote, remote-cache ... (49 actions, 5 running)
    2489:  (02:36:47) �[32m[15,134 / 15,525]�[0m 1766 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 87s remote, remote-cache ... (50 actions, 6 running)
    2490:  (02:36:53) �[32m[15,143 / 15,539]�[0m 1766 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 93s remote, remote-cache ... (50 actions, 7 running)
    2491:  (02:36:58) �[32m[15,144 / 15,539]�[0m 1767 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 98s remote, remote-cache ... (50 actions, 6 running)
    2492:  (02:37:03) �[32m[15,144 / 15,539]�[0m 1767 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 103s remote, remote-cache ... (50 actions, 7 running)
    2493:  (02:37:13) �[32m[15,144 / 15,539]�[0m 1767 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 113s remote, remote-cache ... (50 actions, 7 running)
    2494:  (02:37:20) �[32m[15,144 / 15,539]�[0m 1767 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 120s remote, remote-cache ... (50 actions, 9 running)
    2495:  (02:37:23) �[31m�[1mFAIL: �[0m//javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/javascript/node/selenium-webdriver/test-bidi-browsingcontext-inspector-test.js-firefox/test_attempts/attempt_1.log)
    2496:  (02:37:28) �[32m[15,145 / 15,539]�[0m 1768 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 128s remote, remote-cache ... (50 actions, 9 running)
    2497:  (02:37:33) �[32m[15,148 / 15,539]�[0m 1771 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 133s remote, remote-cache ... (50 actions, 9 running)
    2498:  (02:37:44) �[32m[15,148 / 15,539]�[0m 1771 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 144s remote, remote-cache ... (50 actions, 9 running)
    2499:  (02:37:59) �[32m[15,148 / 15,539]�[0m 1771 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 159s remote, remote-cache ... (50 actions, 10 running)
    2500:  (02:38:07) �[32m[15,148 / 15,539]�[0m 1771 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 166s remote, remote-cache ... (50 actions, 14 running)
    2501:  (02:38:13) �[32m[15,153 / 15,539]�[0m 1776 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 173s remote, remote-cache ... (50 actions, 16 running)
    2502:  (02:38:18) �[32m[15,154 / 15,539]�[0m 1777 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 178s remote, remote-cache ... (50 actions, 17 running)
    2503:  (02:38:24) �[32m[15,157 / 15,539]�[0m 1779 / 2156 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-chrome; 184s remote, remote-cache ... (50 actions, 19 running)
    2504:  (02:38:26) �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:driver-chrome (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/driver-chrome/test.log)
    2505:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver:driver-chrome (Summary)
    ...
    
    2534:  finds by tag name
    2535:  finds above another
    2536:  finds child element
    2537:  finds child element by tag name
    2538:  finds elements with the shortcut syntax
    2539:  raises if element not found
    2540:  raises if invalid locator
    2541:  many elements
    2542:  finds by class name (FAILED - 1)
    ...
    
    2558:  returns numbers
    2559:  returns elements
    2560:  unwraps elements in deep objects
    2561:  returns booleans
    2562:  raises if the script is bad
    2563:  returns arrays
    2564:  is able to call functions on the page
    2565:  is able to pass string arguments
    2566:  is able to pass boolean arguments (FAILED - 2)
    ...
    
    2570:  is able to pass element arguments
    2571:  is able to pass in multiple arguments
    2572:  execute async script
    2573:  is able to return arrays of primitives from async scripts
    2574:  is able to pass multiple arguments to async scripts
    2575:  times out if the callback is not invoked
    2576:  Failures:
    2577:  1) Selenium::WebDriver::Driver many elements finds by class name
    2578:  Failure/Error: expect(driver.find_elements(class: 'nameC').size).to eq(2)
    2579:  Selenium::WebDriver::Error::WebDriverError:
    2580:  tab crashed
    2581:  (Session info: chrome=134.0.6998.35)
    2582:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2583:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    ...
    
    2587:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2588:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2589:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
    2590:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:571:in `find_elements_by'
    2591:  # ./rb/lib/selenium/webdriver/common/search_context.rb:86:in `find_elements'
    2592:  # ./rb/spec/integration/selenium/webdriver/driver_spec.rb:165:in `block in WebDriver'
    2593:  # ------------------
    2594:  # --- Caused by: ---
    2595:  # Selenium::WebDriver::Error::WebDriverError:
    ...
    
    2615:  #19 0x5558da372f12 <unknown>
    2616:  #20 0x5558da3902b4 <unknown>
    2617:  #21 0x5558da3570af <unknown>
    2618:  #22 0x5558da3b3ad8 <unknown>
    2619:  #23 0x5558da3b3cb6 <unknown>
    2620:  #24 0x5558da3c42e6 <unknown>
    2621:  #25 0x7f2bc183a609 start_thread
    2622:  2) Selenium::WebDriver::Driver#execute_script is able to pass boolean arguments
    2623:  Failure/Error: driver.navigate.to url_for('javascriptPage.html')
    2624:  Selenium::WebDriver::Error::WebDriverError:
    2625:  tab crashed
    2626:  (Session info: chrome=134.0.6998.35)
    2627:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2628:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    ...
    
    2632:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2633:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2634:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
    2635:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:119:in `get'
    2636:  # ./rb/lib/selenium/webdriver/common/navigation.rb:32:in `to'
    2637:  # ./rb/spec/integration/selenium/webdriver/driver_spec.rb:319:in `block in WebDriver'
    2638:  # ------------------
    2639:  # --- Caused by: ---
    2640:  # Selenium::WebDriver::Error::WebDriverError:
    ...
    
    2660:  #19 0x55bb05f6cf12 <unknown>
    2661:  #20 0x55bb05f8a2b4 <unknown>
    2662:  #21 0x55bb05f510af <unknown>
    2663:  #22 0x55bb05fadad8 <unknown>
    2664:  #23 0x55bb05fadcb6 <unknown>
    2665:  #24 0x55bb05fbe2e6 <unknown>
    2666:  #25 0x7f8a643f1609 start_thread
    2667:  Finished in 24.08 seconds (files took 2.28 seconds to load)
    2668:  51 examples, 2 failures
    2669:  Failed examples:
    ...
    
    2699:  finds by tag name
    2700:  finds above another
    2701:  finds child element
    2702:  finds child element by tag name
    2703:  finds elements with the shortcut syntax
    2704:  raises if element not found
    2705:  raises if invalid locator
    2706:  many elements
    2707:  finds by class name (FAILED - 1)
    ...
    
    2723:  returns numbers
    2724:  returns elements
    2725:  unwraps elements in deep objects
    2726:  returns booleans
    2727:  raises if the script is bad
    2728:  returns arrays
    2729:  is able to call functions on the page
    2730:  is able to pass string arguments
    2731:  is able to pass boolean arguments (FAILED - 2)
    ...
    
    2735:  is able to pass element arguments
    2736:  is able to pass in multiple arguments
    2737:  execute async script
    2738:  is able to return arrays of primitives from async scripts
    2739:  is able to pass multiple arguments to async scripts
    2740:  times out if the callback is not invoked
    2741:  Failures:
    2742:  1) Selenium::WebDriver::Driver many elements finds by class name
    2743:  Failure/Error: expect(driver.find_elements(class: 'nameC').size).to eq(2)
    2744:  Selenium::WebDriver::Error::WebDriverError:
    2745:  tab crashed
    2746:  (Session info: chrome=134.0.6998.35)
    2747:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2748:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    ...
    
    2752:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2753:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2754:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
    2755:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:571:in `find_elements_by'
    2756:  # ./rb/lib/selenium/webdriver/common/search_context.rb:86:in `find_elements'
    2757:  # ./rb/spec/integration/selenium/webdriver/driver_spec.rb:165:in `block in WebDriver'
    2758:  # ------------------
    2759:  # --- Caused by: ---
    2760:  # Selenium::WebDriver::Error::WebDriverError:
    ...
    
    2774:  #13 0x55d3abbe7f12 <unknown>
    2775:  #14 0x55d3abc052b4 <unknown>
    2776:  #15 0x55d3abbcc0af <unknown>
    2777:  #16 0x55d3abc28ad8 <unknown>
    2778:  #17 0x55d3abc28cb6 <unknown>
    2779:  #18 0x55d3abc392e6 <unknown>
    2780:  #19 0x7fbcc1191609 start_thread
    2781:  2) Selenium::WebDriver::Driver#execute_script is able to pass boolean arguments
    2782:  Failure/Error: driver.navigate.to url_for('javascriptPage.html')
    2783:  Selenium::WebDriver::Error::WebDriverError:
    2784:  tab crashed
    2785:  (Session info: chrome=134.0.6998.35)
    2786:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2787:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    ...
    
    2791:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2792:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2793:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
    2794:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:119:in `get'
    2795:  # ./rb/lib/selenium/webdriver/common/navigation.rb:32:in `to'
    2796:  # ./rb/spec/integration/selenium/webdriver/driver_spec.rb:319:in `block in WebDriver'
    2797:  # ------------------
    2798:  # --- Caused by: ---
    2799:  # Selenium::WebDriver::Error::WebDriverError:
    ...
    
    2819:  #19 0x56231e3d0f12 <unknown>
    2820:  #20 0x56231e3ee2b4 <unknown>
    2821:  #21 0x56231e3b50af <unknown>
    2822:  #22 0x56231e411ad8 <unknown>
    2823:  #23 0x56231e411cb6 <unknown>
    2824:  #24 0x56231e4222e6 <unknown>
    2825:  #25 0x7fbb12799609 start_thread
    2826:  Finished in 25.19 seconds (files took 2.41 seconds to load)
    2827:  51 examples, 2 failures
    2828:  Failed examples:
    2829:  rspec ./rb/spec/integration/selenium/webdriver/driver_spec.rb:163 # Selenium::WebDriver::Driver many elements finds by class name
    2830:  rspec ./rb/spec/integration/selenium/webdriver/driver_spec.rb:318 # Selenium::WebDriver::Driver#execute_script is able to pass boolean arguments
    2831:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChCgHfMQ0UNCiqLjEC0JFA-PEgdkZWZhdWx0GiUKIB7iwWdgE4sJKN2wu1ogJwywlBTohpEA3hsIJNJMRlWfEJ8D
    2832:  ================================================================================
    2833:  (02:38:32) �[32m[15,158 / 15,539]�[0m 1780 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 172s remote, remote-cache ... (50 actions, 24 running)
    2834:  (02:38:37) �[32m[15,160 / 15,539]�[0m 1783 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 177s remote, remote-cache ... (50 actions, 25 running)
    2835:  (02:38:43) �[31m�[1mFAIL: �[0m//py:common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/py/common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py/test_attempts/attempt_1.log)
    2836:  (02:38:43) �[32m[15,161 / 15,539]�[0m 1783 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 183s remote, remote-cache ... (50 actions, 25 running)
    2837:  (02:38:48) �[32m[15,163 / 15,539]�[0m 1784 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 188s remote, remote-cache ... (50 actions, 26 running)
    2838:  (02:38:53) �[32m[15,164 / 15,539]�[0m 1785 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 193s remote, remote-cache ... (50 actions, 26 running)
    2839:  (02:38:58) �[32m[15,169 / 15,539]�[0m 1789 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 198s remote, remote-cache ... (50 actions, 26 running)
    2840:  (02:39:08) �[32m[15,169 / 15,539]�[0m 1789 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 208s remote, remote-cache ... (50 actions, 26 running)
    2841:  (02:39:14) �[32m[15,172 / 15,539]�[0m 1792 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 214s remote, remote-cache ... (50 actions, 27 running)
    2842:  (02:39:19) �[32m[15,176 / 15,539]�[0m 1796 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 219s remote, remote-cache ... (50 actions, 26 running)
    2843:  (02:39:26) �[32m[15,179 / 15,539]�[0m 1799 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 226s remote, remote-cache ... (50 actions, 27 running)
    2844:  (02:39:26) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/bidi:BiDiTest-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/bidi/BiDiTest-remote/test_attempts/attempt_1.log)
    2845:  (02:39:33) �[32m[15,182 / 15,539]�[0m 1802 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 233s remote, remote-cache ... (50 actions, 27 running)
    2846:  (02:39:38) �[32m[15,183 / 15,539]�[0m 1803 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 238s remote, remote-cache ... (50 actions, 28 running)
    2847:  (02:39:44) �[32m[15,190 / 15,539]�[0m 1810 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 243s remote, remote-cache ... (50 actions, 28 running)
    2848:  (02:39:49) �[32m[15,195 / 15,539]�[0m 1815 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 248s remote, remote-cache ... (50 actions, 26 running)
    2849:  (02:39:54) �[32m[15,204 / 15,541]�[0m 1821 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 254s remote, remote-cache ... (50 actions, 26 running)
    2850:  (02:40:02) �[32m[15,207 / 15,541]�[0m 1823 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 262s remote, remote-cache ... (50 actions, 32 running)
    2851:  (02:40:08) �[32m[15,209 / 15,541]�[0m 1825 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 268s remote, remote-cache ... (50 actions, 32 running)
    2852:  (02:40:14) �[32m[15,213 / 15,541]�[0m 1829 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 273s remote, remote-cache ... (50 actions, 31 running)
    2853:  (02:40:20) �[32m[15,217 / 15,541]�[0m 1833 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 280s remote, remote-cache ... (50 actions, 34 running)
    2854:  (02:40:25) �[32m[15,217 / 15,541]�[0m 1833 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 285s remote, remote-cache ... (50 actions, 35 running)
    2855:  (02:40:26) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextInspectorTest-edge-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/bidi/browsingcontext/BrowsingContextInspectorTest-edge-remote/test_attempts/attempt_1.log)
    2856:  (02:40:27) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/support/locators:RelativeLocatorTest-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/support/locators/RelativeLocatorTest-remote/test_attempts/attempt_1.log)
    2857:  (02:40:30) �[32m[15,221 / 15,541]�[0m 1837 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 290s remote, remote-cache ... (50 actions, 38 running)
    2858:  (02:40:35) �[32m[15,227 / 15,543]�[0m 1840 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 295s remote, remote-cache ... (50 actions, 39 running)
    2859:  (02:40:41) �[32m[15,227 / 15,543]�[0m 1840 / 2156 tests, �[31m�[1m2 failed�[0m;�[0m Testing //javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox; 300s remote, remote-cache ... (50 actions, 43 running)
    ...
    
    2863:  (02:40:41) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium/bidi:BiDiTest-remote:
    2864:  Location found is: /mnt/engflow/worker/work/0/exec/bazel-out/k8-fastbuild/bin/java/test/org/openqa/selenium/bidi/BiDiTest-remote.runfiles/_main/java/src/org/openqa/selenium/grid/selenium_server
    2865:  02:39:18.672 INFO [LoggingOptions.configureLogEncoding] - Using the system default encoding
    2866:  02:39:18.690 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
    2867:  02:39:24.606 INFO [NodeOptions.getSessionFactories] - Detected 1 available processors
    2868:  02:39:24.617 INFO [NodeOptions.discoverDrivers] - Looking for existing drivers on the PATH.
    2869:  02:39:24.617 INFO [NodeOptions.discoverDrivers] - Add '--selenium-manager true' to the startup command to setup drivers automatically.
    2870:  Failures: 1
    2871:  1) canNavigateAndListenToErrors() (org.openqa.selenium.bidi.BiDiTest)
    ...
    
    2936:  at org.openqa.selenium.testing.SeleniumExtension.getDriver(SeleniumExtension.java:254)
    2937:  at org.openqa.selenium.testing.JupiterTestBase.prepareEnvironment(JupiterTestBase.java:84)
    2938:  at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    2939:  at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    2940:  at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    2941:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChCgHfMQ0UNCiqLjEC0JFA-PEgdkZWZhdWx0GiUKICrHP7Sey221iPe1b8YnoixXUh_Zo0yMF04IN8uOeQ3pEJ8D
    2942:  ================================================================================
    2943:  (02:40:42) �[31m�[1mFAIL: �[0m//javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/javascript/node/selenium-webdriver/test-bidi-browsingcontext-inspector-test.js-firefox/test.log)
    2944:  �[31m�[1mFAILED: �[0m//javascript/node/selenium-webdriver:test-bidi-browsingcontext-inspector-test.js-firefox (Summary)
    ...
    
    2954:  ✔ can listen to tab browsing context created event (245ms)
    2955:  ✔ can listen to dom content loaded event (291ms)
    2956:  ✔ can listen to browsing context loaded event (293ms)
    2957:  ✔ can listen to navigation started event (260ms)
    2958:  ✔ can listen to fragment navigated event (483ms)
    2959:  ✔ can listen to user prompt opened event (967ms)
    2960:  ✔ can listen to user prompt closed event (993ms)
    2961:  8 passing (54s)
    2962:  1 failing
    2963:  1) [firefox]
    2964:  Browsing Context Inspector
    2965:  can listen to browsing context destroyed event:
    2966:  AssertionError [ERR_ASSERTION]: [] == null
    ...
    
    2977:  ✔ can listen to tab browsing context created event (545ms)
    2978:  ✔ can listen to dom content loaded event (1455ms)
    2979:  ✔ can listen to browsing context loaded event (935ms)
    2980:  ✔ can listen to navigation started event (1172ms)
    2981:  ✔ can listen to fragment navigated event (635ms)
    2982:  ✔ can listen to user prompt opened event (888ms)
    2983:  ✔ can listen to user prompt closed event (897ms)
    2984:  8 passing (2m)
    2985:  1 failing
    2986:  1) [firefox]
    2987:  Browsing Context Inspector
    2988:  can listen to browsing context destroyed event:
    2989:  AssertionError [ERR_ASSERTION]: [] == null
    2990:  at Context.<anonymous> (test/bidi/browsingcontext_inspector_test.js:71:16)
    2991:  at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    2992:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChCgHfMQ0UNCiqLjEC0JFA-PEgdkZWZhdWx0GiUKII-grZYVLwvBTkYI4aptK74NTh3P3v-VI8afmmdIb3oIEJ8D
    2993:  ================================================================================
    2994:  (02:40:42) �[31m�[1mFAIL: �[0m//py:common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/py/common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py/test.log)
    2995:  �[31m�[1mFAILED: �[0m//py:common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py (Summary)
    ...
    
    2999:  ==================== Test output for //py:common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py:
    3000:  ============================= test session starts ==============================
    3001:  platform linux -- Python 3.9.21, pytest-7.4.4, pluggy-1.3.0
    3002:  rootdir: /mnt/engflow/worker/work/0/exec/bazel-out/k8-fastbuild/bin/py/common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py.runfiles/_main/py
    3003:  configfile: pyproject.toml
    3004:  plugins: instafail-0.5.0, trio-0.8.0, mock-3.12.0
    3005:  collected 4 items
    3006:  py/test/selenium/webdriver/common/bidi_tests.py::test_check_console_messages[chrome] PASSED [ 25%]
    3007:  py/test/selenium/webdriver/common/bidi_tests.py::test_check_error_console_messages[chrome] PASSED [ 50%]
    3008:  py/test/selenium/webdriver/common/bidi_tests.py::test_collect_js_exceptions[chrome] PASSED [ 75%]
    3009:  py/test/selenium/webdriver/common/bidi_tests.py::test_collect_log_mutations[chrome] FAILED [100%]
    ...
    
    3028:  await self.gen.athrow(typ, value, traceback)
    3029:  py/selenium/webdriver/remote/webdriver.py:1240: in bidi_connection
    3030:  yield BidiConnection(session, cdp, devtools)
    3031:  ../rules_python++python+python_3_9_x86_64-unknown-linux-gnu/lib/python3.9/contextlib.py:199: in __aexit__
    3032:  await self.gen.athrow(typ, value, traceback)
    3033:  py/selenium/webdriver/common/bidi/cdp.py:494: in open_cdp
    3034:  await conn.aclose()
    3035:  ../rules_python++pip+py_dev_requirements_39_trio/site-packages/trio/_core/_run.py:850: in __aexit__
    3036:  raise combined_error_from_nursery
    ...
    
    3040:  self._handle_event(data)
    3041:  py/selenium/webdriver/common/bidi/cdp.py:304: in _handle_event
    3042:  event = devtools.util.parse_json_event(data)
    3043:  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    3044:  json = {'method': 'Page.frameStartedNavigating', 'params': {'frameId': '6AC6DC3F1777EB58C7E5F5D29F068A4D', 'loaderId': '48368...e': 'differentDocument', 'url': 'http://127.0.0.1:8000/dynamic.html'}, 'sessionId': '7D4B4A5B2541FBCD695B480FB8F9BB92'}
    3045:  def parse_json_event(json: T_JSON_DICT) -> typing.Any:
    3046:  ''' Parse a JSON dictionary into a CDP event. '''
    3047:  >       return _event_parsers[json['method']].from_json(json['params'])
    3048:  E       KeyError: 'Page.frameStartedNavigating'
    3049:  py/selenium/webdriver/common/devtools/v133/util.py:20: KeyError
    3050:  =============================== warnings summary ===============================
    3051:  test/selenium/webdriver/common/bidi_tests.py::test_collect_log_mutations[chrome]
    3052:  /mnt/engflow/worker/work/0/exec/bazel-out/k8-fastbuild/bin/py/common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py.runfiles/rules_python++pip+py_dev_requirements_39_trio_websocket/site-packages/trio_websocket/_impl.py:64: TrioDeprecationWarning: trio.MultiError is deprecated since Trio 0.22.0; use BaseExceptionGroup (on Python 3.11 and later) or exceptiongroup.BaseExceptionGroup (earlier versions) instead (https://github.com/python-trio/trio/issues/2211)
    3053:  return trio.MultiError.filter(remove_cancels, value) is None
    3054:  test/selenium/webdriver/common/bidi_tests.py::test_collect_log_mutations[chrome]
    3055:  /mnt/engflow/worker/work/0/exec/bazel-out/k8-fastbuild/bin/py/common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py.runfiles/rules_python++pip+py_dev_requirements_39_trio_websocket/site-packages/trio_websocket/_impl.py:64: TrioDeprecationWarning: MultiError.filter() is deprecated since Trio 0.22.0; use BaseExceptionGroup.split() instead (https://github.com/python-trio/trio/issues/2211)
    3056:  return trio.MultiError.filter(remove_cancels, value) is None
    3057:  -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
    3058:  =========================== short test summary info ============================
    3059:  FAILED py/test/selenium/webdriver/common/bidi_tests.py::test_collect_log_mutations[chrome] - KeyError: 'Page.frameStartedNavigating'
    3060:  =================== 1 failed, 3 passed, 2 warnings in 8.71s ====================
    ...
    
    3063:  ==================== Test output for //py:common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py:
    3064:  ============================= test session starts ==============================
    3065:  platform linux -- Python 3.9.21, pytest-7.4.4, pluggy-1.3.0
    3066:  rootdir: /mnt/engflow/worker/work/0/exec/bazel-out/k8-fastbuild/bin/py/common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py.runfiles/_main/py
    3067:  configfile: pyproject.toml
    3068:  plugins: instafail-0.5.0, trio-0.8.0, mock-3.12.0
    3069:  collected 4 items
    3070:  py/test/selenium/webdriver/common/bidi_tests.py::test_check_console_messages[chrome] PASSED [ 25%]
    3071:  py/test/selenium/webdriver/common/bidi_tests.py::test_check_error_console_messages[chrome] PASSED [ 50%]
    3072:  py/test/selenium/webdriver/common/bidi_tests.py::test_collect_js_exceptions[chrome] PASSED [ 75%]
    3073:  py/test/selenium/webdriver/common/bidi_tests.py::test_collect_log_mutations[chrome] FAILED [100%]
    ...
    
    3092:  await self.gen.athrow(typ, value, traceback)
    3093:  py/selenium/webdriver/remote/webdriver.py:1240: in bidi_connection
    3094:  yield BidiConnection(session, cdp, devtools)
    3095:  ../rules_python++python+python_3_9_x86_64-unknown-linux-gnu/lib/python3.9/contextlib.py:199: in __aexit__
    3096:  await self.gen.athrow(typ, value, traceback)
    3097:  py/selenium/webdriver/common/bidi/cdp.py:494: in open_cdp
    3098:  await conn.aclose()
    3099:  ../rules_python++pip+py_dev_requirements_39_trio/site-packages/trio/_core/_run.py:850: in __aexit__
    3100:  raise combined_error_from_nursery
    ...
    
    3104:  self._handle_event(data)
    3105:  py/selenium/webdriver/common/bidi/cdp.py:304: in _handle_event
    3106:  event = devtools.util.parse_json_event(data)
    3107:  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    3108:  json = {'method': 'Page.frameStartedNavigating', 'params': {'frameId': 'E61E4C49F97180FC494C20C13B5B616F', 'loaderId': '3C7B5...e': 'differentDocument', 'url': 'http://127.0.0.1:8000/dynamic.html'}, 'sessionId': '56E1B9C8D33236E8FD5DB2BDB7996678'}
    3109:  def parse_json_event(json: T_JSON_DICT) -> typing.Any:
    3110:  ''' Parse a JSON dictionary into a CDP event. '''
    3111:  >       return _event_parsers[json['method']].from_json(json['params'])
    3112:  E       KeyError: 'Page.frameStartedNavigating'
    3113:  py/selenium/webdriver/common/devtools/v133/util.py:20: KeyError
    3114:  =============================== warnings summary ===============================
    3115:  test/selenium/webdriver/common/bidi_tests.py::test_collect_log_mutations[chrome]
    3116:  /mnt/engflow/worker/work/0/exec/bazel-out/k8-fastbuild/bin/py/common-chrome-bidi-test/selenium/webdriver/common/bidi_tests.py.runfiles/rules_python++pip+py_dev_requirements_39_trio_websocket/site-packages/trio_websocket/_impl.py:64: TrioDeprecationWarning: trio.MultiError is deprecated since Trio 0.22.0; use BaseExceptionGroup (on Python 3.11 and later) or exceptiongroup.BaseExceptionGroup (earlier versions) instead (https://github.com/python-trio/trio/issues/2211)
    3117:  return trio.MultiError.filter(remove_cancels, value) is None
    3118:  test/selenium/webdriver/common/bidi_tests.py::test_collect_log_mutations[chrome]
    3119:  /mnt/engflow/worker/work/0/exec/bazel-out/k8-fas...

    @@ -77,8 +76,7 @@ public class NodeServer extends TemplateGridServerCommand {
    private final AtomicBoolean nodeRegistered = new AtomicBoolean(false);
    private Node node;
    private EventBus bus;
    private final Thread shutdownHook =
    new Thread(() -> bus.fire(new NodeRemovedEvent(node.getStatus())));
    private final Thread shutdownHook = new Thread(() -> node.drain());
    Copy link
    Member

    Choose a reason for hiding this comment

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

    After checking the code briefly, I see that NodeRemovedEvent is processed in several places. I don't dislike shutting down the Node by draining it. We need to make sure we respect the current logic, which is to check where NodeRemovedEvent is used and adapt to it, or fire a NodeRemovedEvent when the Node drains.

    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 also checked, in drain() it will fire 2 events are NodeDrainStarted and NodeDrainComplete
    Get back NodeServer, it also listen on event NodeDrainComplete for System.exit(0)
    Do you think this event cycle is safe enough?

    @joerg1985
    Copy link
    Member

    IMHO, this will not fix #15347, will report details later in the original issue.

    @VietND96
    Copy link
    Member Author

    VietND96 commented Mar 4, 2025

    It might not fix 15347. However, sometimes I can reproduce with a strict condition, something like
    There are multiple concurrent sessions, and new Nodes are continuously registered to Hub, each Node set drain-after-session-count=3 (this might reproduce RestartedNode since container get restarted and back to Hub). The script steps in sequentially from create to quit().
    Do you think something proceeded asynchronous?

    selenium.common.exceptions.InvalidSessionIdException: Message: Unable to find session with ID: 9d7b409b-b311-470a-b227-1944cd05ac73
    Build info: version: '4.30.0-SNAPSHOT', revision: 'Unknown'
    System info: os.name: 'Linux', os.arch: 'aarch64', os.version: '6.12.5-linuxkit', java.version: '21.0.6'
    Driver info: driver.version: unknown
    Stacktrace:
    org.openqa.selenium.NoSuchSessionException: Unable to find session with ID: 9d7b409b-b311-470a-b227-1944cd05ac73
    Build info: version: '4.30.0-SNAPSHOT', revision: 'Unknown'
    System info: os.name: 'Linux', os.arch: 'aarch64', os.version: '6.12.5-linuxkit', java.version: '21.0.6'
    Driver info: driver.version: unknown
            at org.openqa.selenium.grid.sessionmap.local.LocalSessionMap.get(LocalSessionMap.java:117)
            at org.openqa.selenium.grid.sessionmap.SessionMap.getUri(SessionMap.java:84)
            at org.openqa.selenium.grid.router.HandleSession.lambda$loadSessionId$4(HandleSession.java:225)
            at io.opentelemetry.context.Context.lambda$wrap$2(Context.java:253)
            at org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:182)
            at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:397)
            at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
            at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:360)
            at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
            at org.openqa.selenium.grid.router.Router.execute(Router.java:89)
            at org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)
            at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
            at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:360)
            at org.openqa.selenium.remote.http.Route.execute(Route.java:69)
            at org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)
            at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
            at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
            at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
            at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)
            at org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:49)
            at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
            at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
            at java.base/java.lang.Thread.run(Thread.java:1583)
    
    
    

    @joerg1985
    Copy link
    Member

    Without looking deeper into this i would assume the following might happen:

    1. NodeRestartedEvent is raised
    2. A new session is started
    3. The NodeRestartedEvent.listener inside the LocalSessionMap i deleting the session, because it only checks the URL not the node id
    4. The new session is accessed -> The LocalSessionMap has killed it just before.

    Are you able to run a patched version of the Hub? If so, just remove the NodeRestartedEvent.listener inside the LocalSessionMap and see if you can still repoduce. If this is the case, the NodeRestartedEvent.listener inside all of the SessionMap's have to be reworked. But this is hard, as there are datebase changes involved ...

    @joerg1985
    Copy link
    Member

    @VietND96 could you share the hub logs when this happens?
    A NodeRestartedEvent is not rised at all in my local testcase with --drain-after-session-count=1

    @VietND96
    Copy link
    Member Author

    VietND96 commented Mar 4, 2025

    Hub logs that I could collect for one case

    2025-03-05 02:15:56 19:15:56.254 INFO [GridModel.release] - Releasing slot for session id e3ebecfb-7a2e-453a-9695-64593fff2c41
    2025-03-05 02:15:56 19:15:56.255 INFO [LocalSessionMap.remove] - Deleted session from local Session Map, Id: e3ebecfb-7a2e-453a-9695-64593fff2c41
    2025-03-05 02:15:56 19:15:56.255 DEBUG [SeleniumSpanExporter$1.lambda$export$4] - SpanData{spanContext=ImmutableSpanContext{traceId=fdd1232dd89e391cc004238dbf915833, spanId=752a65bf98e6d10a, traceFlags=01, traceState=ArrayBasedTraceState{entries=[]}, remote=false, valid=true}, parentSpanContext=ImmutableSpanContext{traceId=00000000000000000000000000000000, spanId=0000000000000000, traceFlags=00, traceState=ArrayBasedTraceState{entries=[]}, remote=false, valid=false}, resource=Resource{schemaUrl=null, attributes={service.name="selenium-hub", telemetry.sdk.language="java", telemetry.sdk.name="opentelemetry", telemetry.sdk.version="1.46.0"}}, instrumentationScopeInfo=InstrumentationScopeInfo{name=default, version=null, schemaUrl=null, attributes={}}, name=local_sessionmap.remove, kind=INTERNAL, startEpochNanos=1741115756254999846, endEpochNanos=1741115756255042763, attributes=AttributesMap{data={session.id=e3ebecfb-7a2e-453a-9695-64593fff2c41}, capacity=128, totalAddedValues=1}, totalAttributeCount=1, events=[ImmutableEventData{name=Deleted session from local Session Map, attributes={logger="org.openqa.selenium.grid.sessionmap.local.LocalSessionMap", session.id="e3ebecfb-7a2e-453a-9695-64593fff2c41"}, epochNanos=1741115756255010138, totalAttributeCount=2}], totalRecordedEvents=1, links=[], totalRecordedLinks=0, status=ImmutableStatusData{statusCode=UNSET, description=}, hasEnded=true}
    2025-03-05 02:15:56 19:15:56.255 DEBUG [SeleniumSpanExporter$1.lambda$export$3] - {"traceId": "fdd1232dd89e391cc004238dbf915833","eventTime": 1741115756255010138,"eventName": "Deleted session from local Session Map","attributes": {"logger": "org.openqa.selenium.grid.sessionmap.local.LocalSessionMap","session.id": "e3ebecfb-7a2e-453a-9695-64593fff2c41"}}
    ...
    2025-03-05 02:15:58 19:15:58.222 DEBUG [RequestConverter.channelRead0] - Incoming message: DefaultHttpRequest(decodeResult: success, version: HTTP/1.1)
    2025-03-05 02:15:58 DELETE /session/e3ebecfb-7a2e-453a-9695-64593fff2c41 HTTP/1.1
    2025-03-05 02:15:58 Host: selenium-hub:4444
    2025-03-05 02:15:58 Accept-Encoding: identity
    2025-03-05 02:15:58 Accept: application/json
    2025-03-05 02:15:58 Content-Type: application/json;charset=UTF-8
    2025-03-05 02:15:58 User-Agent: selenium/4.29.0 (python linux)
    2025-03-05 02:15:58 Connection: keep-alive
    2025-03-05 02:15:58 19:15:58.222 DEBUG [RequestConverter.channelRead0] - Start of http request: DefaultHttpRequest(decodeResult: success, version: HTTP/1.1)
    2025-03-05 02:15:58 DELETE /session/e3ebecfb-7a2e-453a-9695-64593fff2c41 HTTP/1.1
    2025-03-05 02:15:58 Host: selenium-hub:4444
    2025-03-05 02:15:58 Accept-Encoding: identity
    2025-03-05 02:15:58 Accept: application/json
    2025-03-05 02:15:58 Content-Type: application/json;charset=UTF-8
    2025-03-05 02:15:58 User-Agent: selenium/4.29.0 (python linux)
    2025-03-05 02:15:58 Connection: keep-alive
    2025-03-05 02:15:58 19:15:58.222 DEBUG [RequestConverter.channelRead0] - Incoming message: EmptyLastHttpContent
    2025-03-05 02:15:58 19:15:58.222 DEBUG [RequestConverter.channelRead0] - End of http request: EmptyLastHttpContent
    2025-03-05 02:15:58 19:15:58.223 DEBUG [HttpTracing.inject] - Injecting (DELETE) /session/e3ebecfb-7a2e-453a-9695-64593fff2c41 into OpenTelemetrySpan{traceId=0134c9a59ca7a43d7046b1b4bf408228,spanId=ea557e2f97942e5a} at org.openqa.selenium.grid.router.HandleSession:180
    

    At between, you can see gaps 2 seconds, that is the wait time (by time.sleep in python) before calling driver.quit()
    I see this will happen when using drain-after-session-count, LocalSessionMap will remove the session earlier than client call driver.quit() by the event NodeDrain.
    Both GridModel and LocalSessionMap proceed the event SessionClosedEvent.

    @joerg1985
    Copy link
    Member

    Could you share more of the logs, it is allways good to see what happened some time before and concurrently by other sessions.

    @VietND96
    Copy link
    Member Author

    VietND96 commented Mar 4, 2025

    I attched full logs for id e33534f26859916b894c37fcb5da30df
    e33534f26859916b894c37fcb5da30df.txt
    I also shared my scripts to reproduce the issue https://github.com/NDViet/selenium-grid-stress-test (it is nice if you are using macOS or Ubuntu to run it).

    Signed-off-by: Viet Nguyen Duc <nguyenducviet4496@gmail.com>
    @VietND96 VietND96 changed the title [grid] Node server graceful shutdown [grid] Unable to find session with ID when Node drain-after-session-count Mar 4, 2025
    @VietND96 VietND96 added the C-grid label Mar 5, 2025
    @VietND96
    Copy link
    Member Author

    VietND96 commented Mar 6, 2025

    @joerg1985, do you think currentSessions.cleanUp() in drain() is correct?

    draining = true;
    // Ensure the pendingSessions counter will not be decremented by timed out sessions not
    // included
    // in the currentSessionCount and the NodeDrainComplete will be raised to early.
    currentSessions.cleanUp();
    int currentSessionCount = getCurrentSessionCount();

    I think Node drain behavior should update Node status to DRAINING but still waiting for sessions to be completed, session only stops on demand (client call quit()), or session gets timed out.

    @joerg1985
    Copy link
    Member

    joerg1985 commented Mar 6, 2025

    @joerg1985, do you think currentSessions.cleanUp() in drain() is correct?

    Yes, It should only perform allready outstanding maintenance operations.
    But i think there is no guarantee all outstanding calls to the removal listener are performed.

    When reading the caffeine issues, there are alot of 'there is no guarantee for this and that' statements.

    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.

    3 participants