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

[py] Add low-level sync API to use DevTools #13977

Merged
merged 4 commits into from
Jun 7, 2024
Merged

[py] Add low-level sync API to use DevTools #13977

merged 4 commits into from
Jun 7, 2024

Conversation

p0deje
Copy link
Member

@p0deje p0deje commented May 19, 2024

User description

Initial implementation of #13975. This provides a low-level API that:

  1. establishes WebSocket connection to the driver;
  2. use the connection to send CDP commands and receive results;
  3. use the connection to subscribe to events;

Once this is merged, I'll work on the subsequent PRs that provide high-level API backed by CDP for now (network interception, log events, basic authentication, etc).

The implementation can also be used to send BiDi commands and subscribe to events once BiDi is implemented in Python (assuming we follow the same pattern as for CDP).


PR Type

Enhancement, Tests


Description

  • Added start_devtools method in webdriver.py to establish a WebSocket connection and interact with DevTools.
  • Implemented WebSocketConnection class to manage WebSocket connections, send and receive messages, and handle events.
  • Added tests for DevTools WebSocket connection and console message logging.
  • Added websocket-client dependency to requirements.txt.
  • Enhanced event_class decorator to add event_class attribute to classes.

Changes walkthrough 📝

Relevant files
Enhancement
generate.py
Add `event_class` attribute to event classes.                       

py/generate.py

  • Added event_class attribute to classes decorated with event_class
    decorator.
  • +1/-0     
    webdriver.py
    Add `start_devtools` method for WebSocket connection to DevTools.

    py/selenium/webdriver/remote/webdriver.py

  • Imported WebSocketConnection.
  • Added start_devtools method to establish WebSocket connection and
    interact with DevTools.
  • Initialized _websocket_connection attribute.
  • +29/-0   
    websocket_connection.py
    Implement `WebSocketConnection` class for WebSocket communication.

    py/selenium/webdriver/remote/websocket_connection.py

  • Created WebSocketConnection class to manage WebSocket connections.
  • Implemented methods for sending and receiving messages, handling
    events, and managing connection state.
  • +107/-0 
    Tests
    devtools_tests.py
    Add tests for DevTools WebSocket connection and console logging.

    py/test/selenium/webdriver/common/devtools_tests.py

  • Added tests for DevTools WebSocket connection and console message
    logging.
  • +38/-0   
    Dependencies
    requirements.txt
    Add `websocket-client` dependency.                                             

    py/requirements.txt

    • Added websocket-client dependency.
    +1/-0     

    💡 PR-Agent usage:
    Comment /help on the PR to get a list of all available PR-Agent tools and their descriptions

    Copy link
    Contributor

    PR Description updated to latest commit (929f205)

    Copy link
    Contributor

    PR Review 🔍

    ⏱️ Estimated effort to review [1-5]

    3, because the PR involves multiple components including a new WebSocket connection class, modifications to the WebDriver class, and the addition of tests. The complexity of the WebSocket operations and the integration with existing systems increase the review effort.

    🧪 Relevant tests

    Yes

    ⚡ Possible issues

    Thread Safety: The WebSocketConnection class uses threads and shared state without visible locks or thread-safe data structures, which might lead to race conditions or data corruption in a multi-threaded environment.

    Error Handling: The start_devtools method in webdriver.py and several methods in WebSocketConnection lack comprehensive error handling, which might lead to unhandled exceptions during WebSocket operations.

    Resource Leak: The WebSocketConnection class does not appear to handle exceptions during WebSocket setup, which could lead to resource leaks if the connection is not properly closed on errors.

    🔒 Security concerns

    No

    @@ -1017,6 +1020,32 @@ def get_log(self, log_type):
    """
    return self.execute(Command.GET_LOG, {"type": log_type})["value"]

    def start_devtools(self):
    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'm not sure about the naming here, any suggestions are welcome.

    Copy link
    Member

    Choose a reason for hiding this comment

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

    Java calls this getDevTools(), I am not sure what is the idiomatic fit for Python.

    Copy link
    Contributor

    Choose a reason for hiding this comment

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

    to start a devtools session in Java -> devTools.createSession();

    Copy link
    Member Author

    @p0deje p0deje May 20, 2024

    Choose a reason for hiding this comment

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

    This method both gets DevTools (loads the proper version) and creates session, then returns both the loaded devtools module and the established connection. start_devtools is the best possible name I came up with for these 2 operations. We could of course split them into 2 separate methods...

    Copy link
    Member

    Choose a reason for hiding this comment

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

    for bidi this should be an implementation detail in the higher level APIs, so not too concerned about it.

    Copy link
    Contributor

    PR Code Suggestions ✨

    CategorySuggestion                                                                                                                                    Score
    Possible issue
    Add exception handling for WebSocket connection initialization

    Add exception handling for the WebSocket connection to manage potential connection errors
    and ensure the application can handle such scenarios gracefully.

    py/selenium/webdriver/remote/websocket_connection.py [81-83]

    -self._ws = WebSocketApp(self.url, on_open=on_open, on_message=on_message, on_error=on_error)
    -self._ws_thread = Thread(target=run_socket)
    -self._ws_thread.start()
    +try:
    +    self._ws = WebSocketApp(self.url, on_open=on_open, on_message=on_message, on_error=on_error)
    +    self._ws_thread = Thread(target=run_socket)
    +    self._ws_thread.start()
    +except Exception as e:
    +    logger.error(f"Failed to start WebSocket connection: {e}")
    +    self._started = False
     
    Suggestion importance[1-10]: 8

    Why: Adding exception handling around the WebSocket connection initialization is crucial to manage potential errors gracefully. This suggestion correctly identifies a significant potential issue and provides a practical improvement to enhance the robustness of the connection setup.

    8
    Add a timeout to the WebSocket thread join method to prevent indefinite hanging

    To ensure the WebSocket thread is properly terminated, add a timeout to the join method in
    the close function, which will prevent the application from hanging indefinitely.

    py/selenium/webdriver/remote/websocket_connection.py [29]

    -self._ws_thread.join()
    +self._ws_thread.join(timeout=10)
     
    Suggestion importance[1-10]: 7

    Why: Adding a timeout to the join method of the WebSocket thread is a practical suggestion to prevent the application from hanging if the thread does not terminate. This change improves the reliability of the close method, ensuring that resources are properly cleaned up even in error scenarios.

    7
    Maintainability
    Encapsulate global variables within the class to avoid potential side effects

    To avoid potential issues with global variables, consider encapsulating the devtools and
    cdp variables within a class or instance. This will help prevent unintended side effects
    and improve code maintainability.

    py/selenium/webdriver/remote/webdriver.py [1024-1029]

    -global devtools
     if self._websocket_connection:
    -    return devtools, self._websocket_connection
    +    return self.devtools, self._websocket_connection
     else:
    -    global cdp
    -    import_cdp()
    +    self.import_cdp()
     
    Suggestion importance[1-10]: 7

    Why: The suggestion to encapsulate global variables like devtools and cdp within a class is valid for improving maintainability and avoiding side effects. However, the provided 'improved_code' does not fully address the necessary changes, such as initializing these variables within the class constructor or managing their scope correctly.

    7
    Enhancement
    Make timeout and interval parameters configurable for the _wait_until method

    Instead of using a fixed timeout and interval for _wait_until, consider making these
    parameters configurable to allow for more flexibility and adaptability in different
    environments.

    py/selenium/webdriver/remote/websocket_connection.py [11-12]

    -_response_wait_timeout = 30
    -_response_wait_interval = 0.1
    +def __init__(self, url, response_wait_timeout=30, response_wait_interval=0.1):
    +    self._response_wait_timeout = response_wait_timeout
    +    self._response_wait_interval = response_wait_interval
     
    Suggestion importance[1-10]: 6

    Why: Making the timeout and interval parameters configurable in the _wait_until method is a good enhancement for flexibility. However, the impact of this change is moderate as it primarily affects internal behavior and does not directly influence the API's external usability or functionality.

    6

    self._started = False
    self._ws = None

    def execute(self, command):
    Copy link
    Member Author

    Choose a reason for hiding this comment

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

    A general comment that applies to this whole PR - do we want to have typing properly implemented? I'm not familiar with the Python typing system so I did what was the easiest for me. I can re-iterate and add types if that's preferred.

    Copy link
    Member

    Choose a reason for hiding this comment

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

    I would invest in typing for the BiDi implementation. Not much in the CDP one.

    Copy link
    Member Author

    Choose a reason for hiding this comment

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

    Types are already available in CDP, the question is should I add types to the WebSocketConnection class.

    Copy link
    Member

    Choose a reason for hiding this comment

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

    I don't think this should be the priority right now. Focus on getting the hard parts implemented, and we can get help from others on the typing later.

    Copy link
    Contributor

    codiumai-pr-agent-pro bot commented May 19, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit a4b8fa4)

    Action: Test / All RBE tests

    Failed stage: Run Bazel [❌]

    Failed test name: test_pen_pointer_properties[chrome]

    Failure summary:

    The action failed because the test test_pen_pointer_properties[chrome] in the file
    w3c_interaction_tests.py failed. The test failed due to an assertion error:

  • Expected event type: pointermove
  • Actual event type: pointerenter

  • Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    975:  Package 'php-symfony-debug-bundle' is not installed, so not removed
    976:  Package 'php-symfony-dependency-injection' is not installed, so not removed
    977:  Package 'php-symfony-deprecation-contracts' is not installed, so not removed
    978:  Package 'php-symfony-discord-notifier' is not installed, so not removed
    979:  Package 'php-symfony-doctrine-bridge' is not installed, so not removed
    980:  Package 'php-symfony-doctrine-messenger' is not installed, so not removed
    981:  Package 'php-symfony-dom-crawler' is not installed, so not removed
    982:  Package 'php-symfony-dotenv' is not installed, so not removed
    983:  Package 'php-symfony-error-handler' is not installed, so not removed
    ...
    
    1679:  (03:41:59) �[33mDEBUG: �[0m/home/runner/.bazel/external/rules_jvm_external~/coursier.bzl:754:18: Found duplicate artifact versions
    1680:  com.google.code.gson:gson has multiple versions 2.10.1, 2.8.9
    1681:  com.google.guava:guava has multiple versions 33.2.0-jre, 31.1-jre
    1682:  org.mockito:mockito-core has multiple versions 5.12.0, 4.3.1
    1683:  Please remove duplicate artifacts from the artifact list so you do not get unexpected artifact versions
    1684:  (03:42:03) �[32mAnalyzing:�[0m 1691 targets (447 packages loaded, 13235 targets configured)
    1685:  �[32m[1 / 1]�[0m checking cached actions
    1686:  (03:42:06) �[33mDEBUG: �[0m/home/runner/.bazel/external/rules_jvm_external~/coursier.bzl:754:18: Found duplicate artifact versions
    1687:  com.google.errorprone:error_prone_annotations has multiple versions 2.11.0, 2.9.0
    ...
    
    1790:  warning CS1701: Assuming assembly reference 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' used by 'Microsoft.Extensions.DependencyInjection' matches identity 'System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' of 'System.Runtime', you may need to supply runtime policy
    1791:  (03:42:58) �[32mINFO: �[0mFrom Building external/contrib_rules_jvm~/java/src/com/github/bazel_contrib/contrib_rules_jvm/junit5/libjunit5-compile-class.jar (19 source files):
    1792:  warning: [options] source value 8 is obsolete and will be removed in a future release
    1793:  warning: [options] target value 8 is obsolete and will be removed in a future release
    1794:  warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
    1795:  (03:42:59) �[32mAnalyzing:�[0m 1691 targets (1154 packages loaded, 33632 targets configured)
    1796:  �[32m[4,992 / 6,504]�[0m 16 / 304 tests;�[0m [Prepa] Action third_party/dotnet/devtools/src/generator/generator/net7.0/generator [for tool] ... (47 actions, 2 running)
    1797:  (03:43:02) �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (66 source files):
    1798:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1799:  private final ErrorCodes errorCodes;
    1800:  ^
    1801:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1802:  this.errorCodes = new ErrorCodes();
    1803:  ^
    1804:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1805:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    1806:  ^
    1807:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1808:  ErrorCodes errorCodes = new ErrorCodes();
    1809:  ^
    1810:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1811:  ErrorCodes errorCodes = new ErrorCodes();
    1812:  ^
    1813:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1814:  response.setStatus(ErrorCodes.SUCCESS);
    1815:  ^
    1816:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1817:  response.setState(ErrorCodes.SUCCESS_STRING);
    1818:  ^
    1819:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1820:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    1821:  ^
    1822:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1823:  new ErrorCodes().getExceptionType((String) rawError);
    1824:  ^
    1825:  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
    1826:  private final ErrorCodes errorCodes = new ErrorCodes();
    1827:  ^
    1828:  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
    1829:  private final ErrorCodes errorCodes = new ErrorCodes();
    1830:  ^
    1831:  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
    1832:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    1833:  ^
    1834:  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
    1835:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    1836:  ^
    1837:  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
    1838:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    1839:  ^
    1840:  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
    1841:  response.setStatus(ErrorCodes.SUCCESS);
    1842:  ^
    1843:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:125: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1844:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    1845:  ^
    1846:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:131: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1847:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    1848:  ^
    1849:  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
    1850:  private final ErrorCodes errorCodes = new ErrorCodes();
    1851:  ^
    1852:  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
    1853:  private final ErrorCodes errorCodes = new ErrorCodes();
    1854:  ^
    1855:  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
    1856:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    1857:  ^
    1858:  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
    1859:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    1860:  ^
    1861:  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
    1862:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    1872:  (03:43:24) �[32mAnalyzing:�[0m 1691 targets (1179 packages loaded, 34777 targets configured)
    1873:  �[32m[7,845 / 8,930]�[0m 80 / 758 tests;�[0m Extracting npm package @mui/icons-material@5.15.18_-796748879; 25s remote, remote-cache ... (50 actions, 1 running)
    1874:  (03:43:29) �[32mAnalyzing:�[0m 1691 targets (1179 packages loaded, 35440 targets configured)
    1875:  �[32m[8,217 / 9,138]�[0m 123 / 789 tests;�[0m [Prepa] Splitting Javascript ../../../javascript/grid-ui/src/index.tsx [esbuild] ... (49 actions, 2 running)
    1876:  (03:43:31) �[32mINFO: �[0mFrom PackageZip javascript/grid-ui/react-zip.jar:
    1877:  /mnt/engflow/worker/work/1/exec/bazel-out/k8-opt-exec-ST-a934f86a68ba/bin/external/rules_pkg~/pkg/private/zip/build_zip.runfiles/rules_python~~python~python_3_8_x86_64-unknown-linux-gnu/lib/python3.8/zipfile.py:1517: UserWarning: Duplicate name: 'grid-ui/'
    1878:  return self._open_to_write(zinfo, force_zip64=force_zip64)
    1879:  (03:43:32) �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (66 source files):
    1880:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1881:  private final ErrorCodes errorCodes;
    1882:  ^
    1883:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1884:  this.errorCodes = new ErrorCodes();
    1885:  ^
    1886:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1887:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    1888:  ^
    1889:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1890:  ErrorCodes errorCodes = new ErrorCodes();
    1891:  ^
    1892:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1893:  ErrorCodes errorCodes = new ErrorCodes();
    1894:  ^
    1895:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1896:  response.setStatus(ErrorCodes.SUCCESS);
    1897:  ^
    1898:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1899:  response.setState(ErrorCodes.SUCCESS_STRING);
    1900:  ^
    1901:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1902:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    1903:  ^
    1904:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1905:  new ErrorCodes().getExceptionType((String) rawError);
    1906:  ^
    1907:  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
    1908:  private final ErrorCodes errorCodes = new ErrorCodes();
    1909:  ^
    1910:  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
    1911:  private final ErrorCodes errorCodes = new ErrorCodes();
    1912:  ^
    1913:  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
    1914:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    1915:  ^
    1916:  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
    1917:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    1918:  ^
    1919:  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
    1920:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    1921:  ^
    1922:  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
    1923:  response.setStatus(ErrorCodes.SUCCESS);
    1924:  ^
    1925:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:125: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1926:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    1927:  ^
    1928:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:131: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1929:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    1930:  ^
    1931:  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
    1932:  private final ErrorCodes errorCodes = new ErrorCodes();
    1933:  ^
    1934:  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
    1935:  private final ErrorCodes errorCodes = new ErrorCodes();
    1936:  ^
    1937:  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
    1938:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    1939:  ^
    1940:  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
    1941:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    1942:  ^
    1943:  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
    1944:  response.setStatus(ErrorCodes.SUCCESS);
    1945:  ^
    1946:  (03:43:34) �[32mAnalyzing:�[0m 1691 targets (1179 packages loaded, 35440 targets configured)
    1947:  �[32m[8,713 / 9,461]�[0m 192 / 789 tests;�[0m [Prepa] Testing //rb/spec/unit/selenium/webdriver/devtools:response ... (49 actions, 1 running)
    1948:  (03:43:36) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/libsmall-tests-test-lib.jar (5 source files) and running annotation processors (AutoServiceProcessor):
    1949:  java/test/org/openqa/selenium/remote/WebDriverFixture.java:170: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1950:  response.setStatus(new ErrorCodes().toStatus(state, Optional.of(400)));
    ...
    
    1970:  ^
    1971:  java/test/org/openqa/selenium/remote/http/FormEncodedDataTest.java:102: warning: [removal] FormEncodedData in org.openqa.selenium.remote.http has been deprecated and marked for removal
    1972:  Optional<Map<String, List<String>>> data = FormEncodedData.getData(request);
    1973:  ^
    1974:  java/test/org/openqa/selenium/remote/http/FormEncodedDataTest.java:114: warning: [removal] FormEncodedData in org.openqa.selenium.remote.http has been deprecated and marked for removal
    1975:  Optional<Map<String, List<String>>> data = FormEncodedData.getData(request);
    1976:  ^
    1977:  (03:43:37) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.jar (1 source file):
    1978:  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
    1979:  import static org.openqa.selenium.remote.ErrorCodes.METHOD_NOT_ALLOWED;
    1980:  ^
    1981:  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
    1982:  assertThat(decoded.getStatus().intValue()).isEqualTo(ErrorCodes.SUCCESS);
    1983:  ^
    1984:  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
    1985:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    1986:  ^
    1987:  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
    1988:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    1989:  ^
    1990:  (03:43:39) �[32mAnalyzing:�[0m 1691 targets (1185 packages loaded, 35613 targets configured)
    1991:  �[32m[9,397 / 9,922]�[0m 354 / 810 tests;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DistributorNodeAvailabilityTest; 2s remote, remote-cache ... (50 actions, 0 running)
    1992:  (03:43:40) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/json/JsonTest.jar (1 source file):
    1993:  java/test/org/openqa/selenium/json/JsonTest.java:430: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1994:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    1995:  ^
    1996:  java/test/org/openqa/selenium/json/JsonTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1997:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    1998:  ^
    1999:  java/test/org/openqa/selenium/json/JsonTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2000:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(32));
    2001:  ^
    2002:  (03:43:41) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/RemotableByTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2003:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2004:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2005:  ^
    2006:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2007:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2008:  ^
    2009:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2010:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2011:  ^
    2012:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2013:  private final ErrorCodes errorCodes = new ErrorCodes();
    2014:  ^
    2015:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2016:  private final ErrorCodes errorCodes = new ErrorCodes();
    2017:  ^
    2018:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2019:  private final ErrorCodes errorCodes = new ErrorCodes();
    2020:  ^
    2021:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2022:  private final ErrorCodes errorCodes = new ErrorCodes();
    2023:  ^
    2024:  (03:43:41) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/ErrorHandlerTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2025:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:79: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2026:  handler.throwIfResponseFailed(createResponse(ErrorCodes.SUCCESS), 100);
    2027:  ^
    2028:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:85: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2029:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2030:  ^
    2031:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:86: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2032:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2033:  ^
    2034:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:87: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2035:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2036:  ^
    2037:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:88: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2038:  assertThrowsCorrectExceptionType(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2039:  ^
    2040:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:90: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2041:  ErrorCodes.METHOD_NOT_ALLOWED, UnsupportedCommandException.class);
    2042:  ^
    2043:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:92: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2044:  ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2045:  ^
    2046:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:94: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2047:  ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2048:  ^
    2049:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:95: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2050:  assertThrowsCorrectExceptionType(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2051:  ^
    2052:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2053:  Response response = createResponse(ErrorCodes.UNHANDLED_ERROR);
    2054:  ^
    2055:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:120: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2056:  createResponse(ErrorCodes.UNHANDLED_ERROR, "boom"), 123))
    2057:  ^
    2058:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:133: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2059:  createResponse(ErrorCodes.UNHANDLED_ERROR, ImmutableMap.of("message", "boom")),
    2060:  ^
    2061:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:147: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2062:  ErrorCodes.UNHANDLED_ERROR,
    2063:  ^
    2064:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:167: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2065:  ErrorCodes.UNHANDLED_ERROR,
    2066:  ^
    2067:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:193: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2068:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2069:  ^
    2070:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:214: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2071:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2072:  ^
    2073:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:248: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2074:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2075:  ^
    2076:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:280: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2077:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2078:  ^
    2079:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:308: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2080:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2081:  ^
    2082:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:327: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2083:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2084:  ^
    2085:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:355: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2086:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2087:  ^
    2088:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:394: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2089:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2090:  ^
    2091:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:426: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2092:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2093:  ^
    2094:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:435: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2095:  exceptions.put(ErrorCodes.NO_SUCH_SESSION, NoSuchSessionException.class);
    2096:  ^
    2097:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:436: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2098:  exceptions.put(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2099:  ^
    2100:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:437: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2101:  exceptions.put(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2102:  ^
    2103:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:438: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2104:  exceptions.put(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2105:  ^
    2106:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:439: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2107:  exceptions.put(ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2108:  ^
    2109:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:440: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2110:  exceptions.put(ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2111:  ^
    2112:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2113:  exceptions.put(ErrorCodes.UNHANDLED_ERROR, WebDriverException.class);
    2114:  ^
    2115:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:442: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2116:  exceptions.put(ErrorCodes.JAVASCRIPT_ERROR, JavascriptException.class);
    2117:  ^
    2118:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:443: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2119:  exceptions.put(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2120:  ^
    2121:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:444: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2122:  exceptions.put(ErrorCodes.TIMEOUT, TimeoutException.class);
    2123:  ^
    2124:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:445: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2125:  exceptions.put(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2126:  ^
    2127:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:446: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2128:  exceptions.put(ErrorCodes.INVALID_COOKIE_DOMAIN, InvalidCookieDomainException.class);
    2129:  ^
    2130:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:447: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2131:  exceptions.put(ErrorCodes.UNABLE_TO_SET_COOKIE, UnableToSetCookieException.class);
    2132:  ^
    2133:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:448: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2134:  exceptions.put(ErrorCodes.UNEXPECTED_ALERT_PRESENT, UnhandledAlertException.class);
    2135:  ^
    2136:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:449: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2137:  exceptions.put(ErrorCodes.NO_ALERT_PRESENT, NoAlertPresentException.class);
    2138:  ^
    2139:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:450: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2140:  exceptions.put(ErrorCodes.ASYNC_SCRIPT_TIMEOUT, ScriptTimeoutException.class);
    2141:  ^
    2142:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:451: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2143:  exceptions.put(ErrorCodes.INVALID_SELECTOR_ERROR, InvalidSelectorException.class);
    2144:  ^
    2145:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:452: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2146:  exceptions.put(ErrorCodes.SESSION_NOT_CREATED, SessionNotCreatedException.class);
    2147:  ^
    2148:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:453: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2149:  exceptions.put(ErrorCodes.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsException.class);
    2150:  ^
    2151:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2152:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR, InvalidSelectorException.class);
    2153:  ^
    2154:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:455: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2155:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR_RETURN_TYPER, InvalidSelectorException.class);
    2156:  ^
    2157:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:469: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2158:  ? ErrorCodes.INVALID_SELECTOR_ERROR
    2159:  ^
    2160:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:471: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2161:  assertThat(new ErrorCodes().toStatusCode(e)).isEqualTo(expected);
    2162:  ^
    2163:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:483: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2164:  response.setState(new ErrorCodes().toState(status));
    ...
    
    2197:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2198:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2199:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2200:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2201:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2202:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2203:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2204:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    2205:  (03:45:20) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:351: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
    ...
    
    2321:  (03:46:16) �[32m[14,461 / 14,954]�[0m 1196 / 1691 tests;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 47s remote, remote-cache ... (50 actions running)
    2322:  (03:46:21) �[32m[14,566 / 14,957]�[0m 1300 / 1691 tests;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 52s remote, remote-cache ... (50 actions, 37 running)
    2323:  (03:46:26) �[32m[14,649 / 14,957]�[0m 1382 / 1691 tests;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 57s remote, remote-cache ... (50 actions, 48 running)
    2324:  (03:46:27) �[31m�[1mFAIL: �[0m//py:common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/py/common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py/test_attempts/attempt_1.log)
    2325:  (03:46:31) �[32m[14,695 / 14,957]�[0m 1429 / 1691 tests;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 62s remote, remote-cache ... (50 actions, 48 running)
    2326:  (03:46:36) �[32m[14,824 / 14,962]�[0m 1553 / 1691 tests;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 67s remote, remote-cache ... (50 actions, 46 running)
    2327:  (03:46:41) �[32m[14,911 / 14,962]�[0m 1640 / 1691 tests;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 72s remote, remote-cache ... (50 actions, 49 running)
    2328:  (03:46:42) �[31m�[1mFAIL: �[0m//py:common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/py/common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py/test.log)
    2329:  �[31m�[1mFAILED: �[0m//py:common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py (Summary)
    ...
    
    2343:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_can_create_pause_action_on_pointer[chrome] PASSED [ 28%]
    2344:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_can_clear_actions[chrome] PASSED [ 35%]
    2345:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_move_and_click[chrome] PASSED [ 42%]
    2346:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_drag_and_drop[chrome] PASSED [ 50%]
    2347:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_context_click[chrome] PASSED [ 57%]
    2348:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_double_click[chrome] XFAIL [ 64%]
    2349:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_dragging_element_with_mouse_moves_it_to_another_list[chrome] PASSED [ 71%]
    2350:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_dragging_element_with_mouse_fires_events[chrome] PASSED [ 78%]
    2351:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_pen_pointer_properties[chrome] FAILED [ 85%]
    ...
    
    2373:  # The default value of width and height for mouse and pen inputs is 1
    2374:  assert round(events[3]["width"], 2) == 1
    2375:  assert round(events[3]["height"], 2) == 1
    2376:  assert round(events[3]["pressure"], 2) == 0.36
    2377:  assert events[3]["tiltX"] == -72
    2378:  assert events[3]["tiltY"] == 9
    2379:  assert events[3]["twist"] == 86
    2380:  >       assert events[6]["type"] == "pointermove"
    2381:  E       AssertionError: assert 'pointerenter' == 'pointermove'
    2382:  E         - pointermove
    2383:  E         + pointerenter
    2384:  py/test/selenium/webdriver/common/w3c_interaction_tests.py:202: AssertionError
    2385:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_touch_pointer_properties[chrome] PASSED [ 92%]
    2386:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_can_scroll_mouse_wheel[chrome] PASSED [100%]
    2387:  =========================== short test summary info ============================
    2388:  XFAIL py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_double_click[chrome] - reason: Fails on Travis
    2389:  FAILED py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_pen_pointer_properties[chrome] - AssertionError: assert 'pointerenter' == 'pointermove'
    2390:  - pointermove
    2391:  + pointerenter
    2392:  =================== 1 failed, 12 passed, 1 xfailed in 11.62s ===================
    ...
    
    2405:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_can_create_pause_action_on_pointer[chrome] PASSED [ 28%]
    2406:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_can_clear_actions[chrome] PASSED [ 35%]
    2407:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_move_and_click[chrome] PASSED [ 42%]
    2408:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_drag_and_drop[chrome] PASSED [ 50%]
    2409:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_context_click[chrome] PASSED [ 57%]
    2410:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_double_click[chrome] XFAIL [ 64%]
    2411:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_dragging_element_with_mouse_moves_it_to_another_list[chrome] PASSED [ 71%]
    2412:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_dragging_element_with_mouse_fires_events[chrome] PASSED [ 78%]
    2413:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_pen_pointer_properties[chrome] FAILED [ 85%]
    ...
    
    2435:  # The default value of width and height for mouse and pen inputs is 1
    2436:  assert round(events[3]["width"], 2) == 1
    2437:  assert round(events[3]["height"], 2) == 1
    2438:  assert round(events[3]["pressure"], 2) == 0.36
    2439:  assert events[3]["tiltX"] == -72
    2440:  assert events[3]["tiltY"] == 9
    2441:  assert events[3]["twist"] == 86
    2442:  >       assert events[6]["type"] == "pointermove"
    2443:  E       AssertionError: assert 'pointerenter' == 'pointermove'
    2444:  E         - pointermove
    2445:  E         + pointerenter
    2446:  py/test/selenium/webdriver/common/w3c_interaction_tests.py:202: AssertionError
    2447:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_touch_pointer_properties[chrome] PASSED [ 92%]
    2448:  py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_can_scroll_mouse_wheel[chrome] PASSED [100%]
    2449:  =========================== short test summary info ============================
    2450:  XFAIL py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_double_click[chrome] - reason: Fails on Travis
    2451:  FAILED py/test/selenium/webdriver/common/w3c_interaction_tests.py::test_pen_pointer_properties[chrome] - AssertionError: assert 'pointerenter' == 'pointermove'
    2452:  - pointermove
    2453:  + pointerenter
    2454:  =================== 1 failed, 12 passed, 1 xfailed in 11.49s ===================
    2455:  Execution result: https://gypsum.cluster.engflow.com/actions/executions/ChCC5Qccg6VMWYal4rVtjvK-EgdkZWZhdWx0GiUKINmESvFVzbayfVW_KN2DkqiLhzOJ4adRMuDVxdK5FM0UEJ8D
    2456:  ================================================================================
    2457:  (03:46:46) �[32m[14,929 / 14,962]�[0m 1659 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 77s remote, remote-cache ... (33 actions running)
    2458:  (03:46:51) �[32m[14,945 / 14,962]�[0m 1674 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 82s remote, remote-cache ... (17 actions running)
    2459:  (03:46:56) �[32m[14,952 / 14,962]�[0m 1682 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 87s remote, remote-cache ... (10 actions running)
    2460:  (03:47:04) �[32m[14,953 / 14,962]�[0m 1682 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 95s remote, remote-cache ... (9 actions running)
    2461:  (03:47:12) �[32m[14,955 / 14,962]�[0m 1684 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-chrome-test/selenium/webdriver/common/webdriverwait_tests.py; 103s remote, remote-cache ... (7 actions running)
    2462:  (03:47:19) �[32m[14,958 / 14,962]�[0m 1687 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/alerts_tests.py; 102s remote, remote-cache ... (4 actions running)
    2463:  (03:47:28) �[32m[14,958 / 14,962]�[0m 1687 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/alerts_tests.py; 110s remote, remote-cache ... (4 actions running)
    2464:  (03:47:41) �[32m[14,958 / 14,962]�[0m 1687 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/alerts_tests.py; 124s remote, remote-cache ... (4 actions running)
    2465:  (03:47:49) �[32m[14,959 / 14,962]�[0m 1688 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/alerts_tests.py; 132s remote, remote-cache ... (3 actions running)
    2466:  (03:47:54) �[32m[14,961 / 14,962]�[0m 1690 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/frame_switching_tests.py; 127s remote, remote-cache
    2467:  (03:48:05) �[32m[14,961 / 14,962]�[0m 1690 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/frame_switching_tests.py; 138s remote, remote-cache
    2468:  (03:48:35) �[32m[14,961 / 14,962]�[0m 1690 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/frame_switching_tests.py; 168s remote, remote-cache
    2469:  (03:49:35) �[32m[14,961 / 14,962]�[0m 1690 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/frame_switching_tests.py; 228s remote, remote-cache
    2470:  (03:50:35) �[32m[14,961 / 14,962]�[0m 1690 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/frame_switching_tests.py; 288s remote, remote-cache
    2471:  (03:51:35) �[32m[14,961 / 14,962]�[0m 1690 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/frame_switching_tests.py; 348s remote, remote-cache
    2472:  (03:51:41) �[32m[14,961 / 14,962]�[0m 1690 / 1691 tests, �[31m�[1m1 failed�[0m;�[0m Testing //py:common-edge-test/selenium/webdriver/common/frame_switching_tests.py; 354s remote, remote-cache
    2473:  (03:51:41) �[32mINFO: �[0mFound 1691 test targets...
    2474:  (03:51:42) �[32mINFO: �[0mElapsed time: 593.423s, Critical Path: 366.80s
    2475:  (03:51:42) �[32mINFO: �[0m14375 processes: 7146 remote cache hit, 6858 internal, 49 local, 322 remote.
    2476:  (03:51:42) �[32mINFO: �[0mBuild completed, 1 test FAILED, 14375 total actions
    ...
    
    2548:  //dotnet/test/common:ElementFindingTest-edge                    �[0m�[32m(cached) PASSED�[0m in 39.0s
    2549:  //dotnet/test/common:ElementFindingTest-firefox                 �[0m�[32m(cached) PASSED�[0m in 43.3s
    2550:  //dotnet/test/common:ElementPropertyTest-chrome                 �[0m�[32m(cached) PASSED�[0m in 6.6s
    2551:  //dotnet/test/common:ElementPropertyTest-edge                   �[0m�[32m(cached) PASSED�[0m in 6.9s
    2552:  //dotnet/test/common:ElementPropertyTest-firefox                �[0m�[32m(cached) PASSED�[0m in 11.6s
    2553:  //dotnet/test/common:ElementSelectingTest-chrome                �[0m�[32m(cached) PASSED�[0m in 10.9s
    2554:  //dotnet/test/common:ElementSelectingTest-edge                  �[0m�[32m(cached) PASSED�[0m in 12.0s
    2555:  //dotnet/test/common:ElementSelectingTest-firefox               �[0m�[32m(cached) PASSED�[0m in 24.2s
    2556:  //dotnet/test/common:ErrorsTest-chrome                          �[0m�[32m(cached) PASSED�[0m in 6.0s
    2557:  //dotnet/test/common:ErrorsTest-edge                            �[0m�[32m(cached) PASSED�[0m in 8.9s
    2558:  //dotnet/test/common:ErrorsTest-firefox                         �[0m�[32m(cached) PASSED�[0m in 9.6s
    ...
    
    2885:  //java/test/org/openqa/selenium:ElementFindingTest-edge         �[0m�[32m(cached) PASSED�[0m in 100.2s
    2886:  //java/test/org/openqa/selenium:ElementFindingTest-firefox-beta �[0m�[32m(cached) PASSED�[0m in 40.0s
    2887:  //java/test/org/openqa/selenium:ElementFindingTest-spotbugs     �[0m�[32m(cached) PASSED�[0m in 8.8s
    2888:  //java/test/org/openqa/selenium:ElementSelectingTest            �[0m�[32m(cached) PASSED�[0m in 27.2s
    2889:  //java/test/org/openqa/selenium:ElementSelectingTest-chrome     �[0m�[32m(cached) PASSED�[0m in 20.5s
    2890:  //java/test/org/openqa/selenium:ElementSelectingTest-edge       �[0m�[32m(cached) PASSED�[0m in 27.4s
    2891:  //java/test/org/openqa/selenium:ElementSelectingTest-firefox-beta �[0m�[32m(cached) PASSED�[0m in 29.9s
    2892:  //java/test/org/openqa/selenium:ElementSelectingTest-spotbugs   �[0m�[32m(cached) PASSED�[0m in 8.8s
    2893:  //java/test/org/openqa/selenium:ErrorsTest                      �[0m�[32m(cached) PASSED�[0m in 16.4s
    2894:  //java/test/org/openqa/selenium:ErrorsTest-chrome               �[0m�[32m(cached) PASSED�[0m in 11.5s
    2895:  //java/test/org/openqa/selenium:ErrorsTest-edge                 �[0m�[32m(cached) PASSED�[0m in 12.3s
    2896:  //java/test/org/openqa/selenium:ErrorsTest-firefox-beta         �[0m�[32m(cached) PASSED�[0m in 13.0s
    2897:  //java/test/org/openqa/selenium:ErrorsTest-spotbugs             �[0m�[32m(cached) PASSED�[0m in 8.3s
    ...
    
    3598:  //java/test/org/openqa/selenium/os:ExternalProcessTest          �[0m�[32m(cached) PASSED�[0m in 3.2s
    3599:  //java/test/org/openqa/selenium/os:ExternalProcessTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 9.2s
    3600:  //java/test/org/openqa/selenium/os:OsProcessTest                �[0m�[32m(cached) PASSED�[0m in 5.3s
    3601:  //java/test/org/openqa/selenium/os:OsProcessTest-spotbugs       �[0m�[32m(cached) PASSED�[0m in 10.0s
    3602:  //java/test/org/openqa/selenium/remote:AugmenterTest            �[0m�[32m(cached) PASSED�[0m in 6.6s
    3603:  //java/test/org/openqa/selenium/remote:AugmenterTest-spotbugs   �[0m�[32m(cached) PASSED�[0m in 11.9s
    3604:  //java/test/org/openqa/selenium/remote:DesiredCapabilitiesTest  �[0m�[32m(cached) PASSED�[0m in 2.0s
    3605:  //java/test/org/openqa/selenium/remote:DesiredCapabilitiesTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 10.4s
    3606:  //java/test/org/openqa/selenium/remote:ErrorCodecTest           �[0m�[32m(cached) PASSED�[0m in 2.2s
    3607:  //java/test/org/openqa/selenium/remote:ErrorCodecTest-spotbugs  �[0m�[32m(cached) PASSED�[0m in 9.2s
    3608:  //java/test/org/openqa/selenium/remote:ErrorHandlerTest         �[0m�[32m(cached) PASSED�[0m in 2.5s
    3609:  //java/test/org/openqa/selenium/remote:ErrorHandlerTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 11.6s
    ...
    
    3784:  //rb/spec/integration/selenium/webdriver:driver-firefox-beta-bidi �[0m�[32m(cached) PASSED�[0m in 25.4s
    3785:  //rb/spec/integration/selenium/webdriver:driver-firefox-bidi    �[0m�[32m(cached) PASSED�[0m in 22.3s
    3786:  //rb/spec/integration/selenium/webdriver:element-edge           �[0m�[32m(cached) PASSED�[0m in 41.9s
    3787:  //rb/spec/integration/selenium/webdriver:element-edge-bidi      �[0m�[32m(cached) PASSED�[0m in 17.3s
    3788:  //rb/spec/integration/selenium/webdriver:element-firefox        �[0m�[32m(cached) PASSED�[0m in 71.0s
    3789:  //rb/spec/integration/selenium/webdriver:element-firefox-beta   �[0m�[32m(cached) PASSED�[0m in 58.9s
    3790:  //rb/spec/integration/selenium/webdriver:element-firefox-beta-bidi �[0m�[32m(cached) PASSED�[0m in 21.2s
    3791:  //rb/spec/integration/selenium/webdriver:element-firefox-bidi   �[0m�[32m(cached) PASSED�[0m in 20.0s
    3792:  //rb/spec/integration/selenium/webdriver:error-chrome           �[0m�[32m(cached) PASSED�[0m in 17.0s
    3793:  //rb/spec/integration/selenium/webdriver:error-chrome-bidi      �[0m�[32m(cached) PASSED�[0m in 16.4s
    3794:  //rb/spec/integration/selenium/webdriver:error-edge             �[0m�[32m(cached) PASSED�[0m in 19.1s
    3795:  //rb/spec/integration/selenium/webdriver:error-edge-bidi        �[0m�[32m(cached) PASSED�[0m in 17.3s
    3796:  //rb/spec/integration/selenium/webdriver:error-firefox          �[0m�[32m(cached) PASSED�[0m in 23.5s
    3797:  //rb/spec/integration/selenium/webdriver:error-firefox-beta     �[0m�[32m(cached) PASSED�[0m in 17.1s
    3798:  //rb/spec/integration/selenium/webdriver:error-firefox-beta-bidi �[0m�[32m(cached) PASSED�[0m in 17.3s
    3799:  //rb/spec/integration/selenium/webdriver:error-firefox-bidi     �[0m�[32m(cached) PASSED�[0m in 23.5s
    ...
    
    4151:  //py:common-firefox-test/selenium/webdriver/support/relative_by_tests.py �[0m�[32mPASSED�[0m in 10.4s
    4152:  //py:test-chrome-test/selenium/webdriver/chrome/chrome_network_emulation_tests.py �[0m�[32mPASSED�[0m in 5.4s
    4153:  //py:unit-test/unit/selenium/webdriver/chrome/chrome_options_tests.py    �[0m�[32mPASSED�[0m in 2.2s
    4154:  //py:unit-test/unit/selenium/webdriver/common/cdp_module_fallback_tests.py �[0m�[32mPASSED�[0m in 2.9s
    4155:  //py:unit-test/unit/selenium/webdriver/common/common_options_tests.py    �[0m�[32mPASSED�[0m in 2.8s
    4156:  //py:unit-test/unit/selenium/webdriver/common/print_page_options_tests.py �[0m�[32mPASSED�[0m in 2.8s
    4157:  //py:unit-test/unit/selenium/webdriver/edge/edge_options_tests.py        �[0m�[32mPASSED�[0m in 3.0s
    4158:  //py:unit-test/unit/selenium/webdriver/firefox/firefox_options_tests.py  �[0m�[32mPASSED�[0m in 2.2s
    4159:  //py:unit-test/unit/selenium/webdriver/remote/error_handler_tests.py     �[0m�[32mPASSED�[0m in 2.5s
    4160:  //py:unit-test/unit/selenium/webdriver/remote/new_session_tests.py       �[0m�[32mPASSED�[0m in 2.5s
    4161:  //py:unit-test/unit/selenium/webdriver/remote/remote_connection_tests.py �[0m�[32mPASSED�[0m in 2.5s
    4162:  //py:unit-test/unit/selenium/webdriver/remote/subtyping_tests.py         �[0m�[32mPASSED�[0m in 2.8s
    4163:  //py:unit-test/unit/selenium/webdriver/safari/safari_options_tests.py    �[0m�[32mPASSED�[0m in 2.8s
    4164:  //py:unit-test/unit/selenium/webdriver/support/color_tests.py            �[0m�[32mPASSED�[0m in 3.6s
    4165:  //py:unit-test/unit/selenium/webdriver/virtual_authenticator/virtual_authenticator_options_tests.py �[0m�[32mPASSED�[0m in 2.6s
    4166:  //py:unit-test/unit/selenium/webdriver/webkitgtk/webkitgtk_options_tests.py �[0m�[32mPASSED�[0m in 2.2s
    4167:  //py:unit-test/unit/selenium/webdriver/wpewebkit/wpewebkit_options_tests.py �[0m�[32mPASSED�[0m in 3.5s
    4168:  //py:common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 14.5s
    4169:  Stats over 2 runs: max = 14.5s, min = 13.4s, avg = 14.0s, dev = 0.5s
    4170:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/py/common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py/test.log
    4171:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/py/common-chrome-test/selenium/webdriver/common/w3c_interaction_tests.py/test_attempts/attempt_1.log
    4172:  Executed 169 out of 1691 tests: 1690 tests pass and �[0m�[31m�[1m1 fails remotely�[0m.
    4173:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
    4174:  (03:51:42) �[32mINFO: �[0mStreaming build results to: https://gypsum.cluster.engflow.com/invocation/9bcc7cc9-3b9c-4568-b40f-7970af893129
    4175:  �[0m
    4176:  ##[error]Process completed with exit code 3.
    

    ✨ CI feedback usage guide:

    The CI feedback tool (/checks) automatically triggers when a PR has a failed check.
    The tool analyzes the failed checks and provides several feedbacks:

    • Failed stage
    • Failed test name
    • Failure summary
    • Relevant error logs

    In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR:

    /checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}"
    

    where {repo_name} is the name of the repository, {run_number} is the run number of the failed check, and {job_number} is the job number of the failed check.

    Configuration options

    • enable_auto_checks_feedback - if set to true, the tool will automatically provide feedback when a check is failed. Default is true.
    • excluded_checks_list - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list.
    • enable_help_text - if set to true, the tool will provide a help message with the feedback. Default is true.
    • persistent_comment - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true.
    • final_update_message - if persistent_comment is true and updating a previous checks message, the tool will also create a new message: "Persistent checks updated to latest commit". Default is true.

    See more information about the checks tool in the docs.

    @titusfortner
    Copy link
    Member

    @p0deje you can lint with ./go py:lint

    selenium/webdriver/remote/websocket_connection.py:47:38: F821 undefined name '_response_wait_timeout'
    selenium/webdriver/remote/websocket_connection.py:78:19: F821 undefined name 'InternalError'
    test/selenium/webdriver/common/devtools_tests.py:19:1: F401 'selenium.webdriver.common.by.By' imported but unused
    test/selenium/webdriver/common/devtools_tests.py:20:1: F401 'selenium.webdriver.common.log.Log' imported but unused
    test/selenium/webdriver/common/devtools_tests.py:21:1: F401 'selenium.webdriver.support.expected_conditions as EC' imported but unused
    

    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.

    4 participants