Skip to content

[grid] Add Node session-history endpoint and write to local file for other utility to consume #15879

New issue

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

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

Already on GitHub? Sign in to your account

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

Conversation

VietND96
Copy link
Member

@VietND96 VietND96 commented Jun 8, 2025

User description

🔗 Related Issues

💥 What does this PR do?

  • Add Node endpoint /se/grid/node/session-history to access all sessions belong to that Node (include sessionId, startTime, stopTime)
curl http://localhost:5555/se/grid/node/session-history --header 'X-REGISTRATION-SECRET;'
{
  "value": [
    {
      "stopTime": "2025-06-08T20:34:29.339926511Z",
      "startTime": "2025-06-08T20:32:48.041564547Z",
      "sessionId": "772498a931cb26ac81ad1eb25e2c100f"
    },
    {
      "stopTime": "2025-06-08T20:32:46.547703796Z",
      "startTime": "2025-06-08T20:31:03.356500138Z",
      "sessionId": "9f60bed0406b87a6eec26e9deda2634b"
    },
  ]
}
  • Add Node config --status-to-file to write Node status JSON to the given location (for internal utility consumption), it is triggered together with event NodeHeartBeatEvent
  • Add Node config --session-history-to-file to write Node session history JSON to the given location (for internal utility consumption), it is triggered when events SessionStartedEvent and SessionStopedEvent fire.

🔧 Implementation Notes

Other utility running sidecare with Node (e.g, video recording), is doing a query to the Node endpoint (/status) in a very short interval (e.g, 2s) to catch up sessions frequently.
Instead of access via remote endpoint, provide another option to write local file (since those processes are running in the same host, others can consume the resource), and the output is updated by event-driven (it's more effective than a static interval hitting the status endpoint).

💡 Additional Considerations

🔄 Types of changes

  • Cleanup (formatting, renaming)
  • Bug fix (backwards compatible)
  • New feature (non-breaking change which adds functionality and tests!)
  • Breaking change (fix or feature that would cause existing functionality to change)

PR Type

Enhancement, Tests


Description

  • Add Node endpoint /se/grid/node/session-history for session tracking

  • Implement Node config options to write status and session history to file

  • Track session start/stop events and persist to file

  • Add comprehensive unit tests for new features


Changes walkthrough 📝

Relevant files
Enhancement
11 files
SessionHistoryEntry.java
Add SessionHistoryEntry for session tracking metadata       
+66/-0   
SessionStartedEvent.java
Introduce SessionStartedEvent for session lifecycle           
+40/-0   
SessionStatus.java
Add SessionStatus enum for session outcome                             
+23/-0   
GetNodeSessionHistory.java
Add HTTP handler for session-history endpoint                       
+45/-0   
Node.java
Add getSessionHistory() and session-history endpoint         
+7/-0     
NodeFlags.java
Add CLI/config flags for status and session history files
+21/-0   
NodeOptions.java
Add accessors for status and session history file config 
+8/-0     
LocalNode.java
Implement file writing and session history tracking in LocalNode
+133/-3 
LocalNodeFactory.java
Pass status/session history file config to LocalNode         
+4/-1     
SessionSlot.java
Fire SessionStartedEvent on session creation                         
+2/-0     
RemoteNode.java
Implement getSessionHistory() for remote nodes                     
+12/-0   
Tests
4 files
SessionClosedEventTest.java
Add tests for SessionClosedEvent and SessionStatus             
+73/-0   
GetNodeSessionHistoryTest.java
Add tests for session-history endpoint handler                     
+149/-0 
NodeOptionsTest.java
Add tests for NodeOptions status/session history config   
+33/-0   
LocalNodeTest.java
Add tests for file writing and session history in LocalNode
+142/-0 

Need help?
  • Type /help how to ... in the comments thread for any questions about Qodo Merge usage.
  • Check out the documentation for more information.
  • @selenium-ci selenium-ci added B-grid Everything grid and server related C-java Java Bindings labels Jun 8, 2025
    Copy link
    Contributor

    qodo-merge-pro bot commented Jun 8, 2025

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    🎫 Ticket compliance analysis ❌

    1234 - Not compliant

    Non-compliant requirements:

    • Fix JavaScript execution in link's href attribute when click() is called
    • Ensure compatibility with Firefox 42.0 32bit on 64bit machine
    • Restore functionality that worked in version 2.47.1 but broke in 2.48.0 and 2.48.2

    5678 - Not compliant

    Non-compliant requirements:

    • Fix ChromeDriver ConnectFailure error on Ubuntu 16.04.4 with Chrome 65.0.3325.181
    • Resolve connection refused errors for subsequent ChromeDriver instances
    • Ensure first ChromeDriver instance works without console errors
    ⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
    🧪 PR contains tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    File I/O Risk

    File writing operations in writeStatusToFile and writeSessionHistoryToFile methods lack proper error handling and could cause performance issues if called frequently. The methods write to disk synchronously on every heartbeat and session event.

    private void writeStatusToFile(NodeStatus status) {
      if (statusFilePath.isEmpty()) {
        return;
      }
    
      try {
        String statusJson = JSON.toJson(status);
        Files.write(
            statusFilePath.get(),
            statusJson.getBytes(),
            StandardOpenOption.CREATE,
            StandardOpenOption.WRITE,
            StandardOpenOption.TRUNCATE_EXISTING);
      } catch (IOException e) {
        LOG.log(Level.WARNING, "Failed to write status to file: " + statusFilePath.get(), e);
      }
    }
    
    private void recordSessionStart(SessionId sessionId) {
      if (!isSessionOwner(sessionId)) {
        return;
      }
      Instant startTime = Instant.now();
      sessionStartTimes.put(sessionId, startTime);
      sessionHistory.add(new SessionHistoryEntry(sessionId, startTime, null));
      writeSessionHistoryToFile();
    }
    
    private void recordSessionStop(SessionId sessionId) {
      if (!isSessionOwner(sessionId)) {
        return;
      }
      Instant stopTime = Instant.now();
      Instant startTime = sessionStartTimes.remove(sessionId);
      if (startTime != null) {
        // Find and update the existing history entry
        sessionHistory.stream()
            .filter(entry -> entry.getSessionId().equals(sessionId))
            .findFirst()
            .ifPresent(entry -> entry.setStopTime(stopTime));
        writeSessionHistoryToFile();
      }
    }
    
    private void writeSessionHistoryToFile() {
      if (sessionHistoryFilePath.isPresent()) {
        try {
          List<SessionHistoryEntry> sortedHistory = new ArrayList<>(sessionHistory);
          sortedHistory.sort((a, b) -> a.getStartTime().compareTo(b.getStartTime()));
    
          String historyJson = JSON.toJson(sortedHistory);
          Files.write(
              sessionHistoryFilePath.get(),
              historyJson.getBytes(),
              StandardOpenOption.CREATE,
              StandardOpenOption.TRUNCATE_EXISTING);
        } catch (IOException e) {
          LOG.log(Level.WARNING, "Unable to write session history to file", e);
        }
      }
    }
    Memory Leak

    The sessionHistory queue and sessionStartTimes map grow indefinitely without any cleanup mechanism, potentially causing memory leaks in long-running nodes with many sessions.

    private final Queue<SessionHistoryEntry> sessionHistory = new ConcurrentLinkedQueue<>();
    private final Map<SessionId, Instant> sessionStartTimes = new ConcurrentHashMap<>();
    Race Condition

    Session history recording methods access shared collections without proper synchronization, which could lead to inconsistent state when multiple sessions start/stop concurrently.

    private void recordSessionStart(SessionId sessionId) {
      if (!isSessionOwner(sessionId)) {
        return;
      }
      Instant startTime = Instant.now();
      sessionStartTimes.put(sessionId, startTime);
      sessionHistory.add(new SessionHistoryEntry(sessionId, startTime, null));
      writeSessionHistoryToFile();
    }
    
    private void recordSessionStop(SessionId sessionId) {
      if (!isSessionOwner(sessionId)) {
        return;
      }
      Instant stopTime = Instant.now();
      Instant startTime = sessionStartTimes.remove(sessionId);
      if (startTime != null) {
        // Find and update the existing history entry
        sessionHistory.stream()
            .filter(entry -> entry.getSessionId().equals(sessionId))
            .findFirst()
            .ifPresent(entry -> entry.setStopTime(stopTime));
        writeSessionHistoryToFile();
      }
    }

    Copy link
    Contributor

    qodo-merge-pro bot commented Jun 8, 2025

    PR Code Suggestions ✨

    Latest suggestions up to b182d49

    CategorySuggestion                                                                                                                                    Impact
    General
    Use atomic file writes

    File write operations should use atomic writes to prevent corruption if the
    process is interrupted during writing. Write to a temporary file first, then
    rename it to the target file.

    java/src/org/openqa/selenium/grid/node/local/LocalNode.java [1188-1203]

     private void writeSessionHistoryToFile() {
       if (sessionHistoryFilePath.isPresent()) {
         try {
           List<SessionHistoryEntry> sortedHistory = new ArrayList<>(sessionHistory);
           String historyJson = JSON.toJson(sortedHistory);
    -      Files.write(
    -          sessionHistoryFilePath.get(),
    -          historyJson.getBytes(),
    -          StandardOpenOption.CREATE,
    -          StandardOpenOption.WRITE,
    -          StandardOpenOption.TRUNCATE_EXISTING);
    +      Path tempFile = Files.createTempFile(sessionHistoryFilePath.get().getParent(), "session-history", ".tmp");
    +      Files.write(tempFile, historyJson.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.WRITE);
    +      Files.move(tempFile, sessionHistoryFilePath.get(), StandardCopyOption.REPLACE_EXISTING);
         } catch (IOException e) {
           LOG.log(Level.WARNING, "Unable to write session history to file", e);
         }
       }
     }
    • Apply / Chat
    Suggestion importance[1-10]: 7

    __

    Why: The suggestion correctly points out that writing directly to the final file is not atomic and can lead to corruption. The proposed solution of writing to a temporary file and then moving it is a standard and robust pattern for ensuring file write atomicity, improving the reliability of the feature.

    Medium
    Add cleanup threshold buffer

    The cleanup method should use a configurable threshold (e.g., 150) instead of
    checking against the exact limit (100) to prevent frequent cleanup operations
    when the history size fluctuates around the limit.

    java/src/org/openqa/selenium/grid/node/local/LocalNode.java [1157-1161]

     private void cleanupSessionHistory(NodeStatus status) {
       int maxHistorySize = 100;
    -  if (!status.getNodeId().equals(getId()) || sessionHistory.size() < maxHistorySize) {
    +  int cleanupThreshold = maxHistorySize + 50; // Add buffer to prevent frequent cleanups
    +  if (!status.getNodeId().equals(getId()) || sessionHistory.size() < cleanupThreshold) {
         return;
       }
       ...
     }

    [To ensure code accuracy, apply this suggestion manually]

    Suggestion importance[1-10]: 6

    __

    Why: The suggestion correctly identifies a potential for performance degradation due to frequent cleanup operations. Adding a buffer to the cleanup threshold is a good practice to prevent this "thrashing" when the history size hovers around the maximum limit.

    Low
    Incremental [*]
    Specify UTF-8 charset explicitly

    Specify UTF-8 charset explicitly when converting string to bytes to ensure
    consistent encoding across different platforms and avoid potential character
    encoding issues

    java/src/org/openqa/selenium/grid/node/local/LocalNode.java [1193-1198]

     Files.write(
         sessionHistoryFilePath.get(),
    -    historyJson.getBytes(),
    +    historyJson.getBytes(StandardCharsets.UTF_8),
         StandardOpenOption.CREATE,
         StandardOpenOption.WRITE,
         StandardOpenOption.TRUNCATE_EXISTING);
    • Apply / Chat
    Suggestion importance[1-10]: 6

    __

    Why: The suggestion correctly recommends specifying a charset when converting a string to bytes. Using getBytes() without a charset relies on the platform's default encoding, which can lead to inconsistencies. Explicitly using StandardCharsets.UTF_8 ensures predictable behavior across different environments.

    Low
    • Update

    Previous suggestions

    ✅ Suggestions up to commit 9436e06
    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Add missing write permission
    Suggestion Impact:The suggestion was directly implemented - StandardOpenOption.WRITE was added to the Files.write operation exactly as suggested

    code diff:

    +            StandardOpenOption.WRITE,

    The file write operation should include StandardOpenOption.WRITE to ensure
    proper write permissions. Without this option, the write operation might fail on
    some file systems or when the file already exists.

    java/src/org/openqa/selenium/grid/node/local/LocalNode.java [1188-1202]

     private void writeSessionHistoryToFile() {
       if (sessionHistoryFilePath.isPresent()) {
         try {
           List<SessionHistoryEntry> sortedHistory = new ArrayList<>(sessionHistory);
           String historyJson = JSON.toJson(sortedHistory);
           Files.write(
               sessionHistoryFilePath.get(),
               historyJson.getBytes(),
               StandardOpenOption.CREATE,
    +          StandardOpenOption.WRITE,
               StandardOpenOption.TRUNCATE_EXISTING);
         } catch (IOException e) {
           LOG.log(Level.WARNING, "Unable to write session history to file", e);
         }
       }
     }

    [Suggestion processed]

    Suggestion importance[1-10]: 7

    __

    Why: The suggestion correctly identifies that StandardOpenOption.WRITE is missing. While Files.write can work without it if the file is new, explicitly adding WRITE makes the intent clearer and ensures the operation works correctly if the file already exists, improving robustness.

    Medium
    Incremental [*]
    Use static empty list
    Suggestion Impact:The suggestion was directly implemented - the code was changed from "return new ArrayList<>();" to "return Collections.emptyList();" exactly as suggested

    code diff:

    -    return new ArrayList<>();
    +    return Collections.emptyList();

    The default implementation returns a new empty ArrayList each time, which could
    be inefficient if called frequently. Consider returning a static empty list or
    Collections.emptyList() to avoid unnecessary object creation.

    java/src/org/openqa/selenium/grid/node/Node.java [277-279]

     public List<SessionHistoryEntry> getSessionHistory() {
    -  return new ArrayList<>();
    +  return Collections.emptyList();
     }

    [Suggestion processed]

    Suggestion importance[1-10]: 4

    __

    Why: The suggestion correctly points out that using Collections.emptyList() is more efficient than new ArrayList<>() for returning an empty list, as it avoids unnecessary object allocation. This is a good practice for code quality and performance, although its impact is minor in this context.

    Low
    ✅ Suggestions up to commit 830b966
    CategorySuggestion                                                                                                                                    Impact
    General
    Prevent unbounded memory growth
    Suggestion Impact:The commit implements a comprehensive cleanup mechanism for session history that prevents unbounded memory growth. It adds a cleanupSessionHistory method that limits the history to 100 completed sessions plus all ongoing sessions, triggered by NodeHeartBeatEvent. This is a more sophisticated solution than the simple size limit suggested.

    code diff:

    +    bus.addListener(NodeHeartBeatEvent.listener(this::cleanupSessionHistory));
     
         shutdown =
             () -> {
    @@ -1138,33 +1137,58 @@
           return;
         }
         Instant startTime = Instant.now();
    -    sessionStartTimes.put(sessionId, startTime);
         sessionHistory.add(new SessionHistoryEntry(sessionId, startTime, null));
         writeSessionHistoryToFile();
       }
     
       private void recordSessionStop(SessionId sessionId) {
    -    if (!isSessionOwner(sessionId)) {
    +    Instant stopTime = Instant.now();
    +    // Find and update the existing history entry
    +    sessionHistory.stream()
    +        .filter(entry -> entry.getSessionId().equals(sessionId))
    +        .findFirst()
    +        .ifPresent(
    +            entry -> {
    +              entry.setStopTime(stopTime);
    +              writeSessionHistoryToFile();
    +            });
    +  }
    +
    +  private void cleanupSessionHistory(NodeStatus status) {
    +    int maxHistorySize = 100;
    +    if (!status.getNodeId().equals(getId()) || sessionHistory.size() < maxHistorySize) {
           return;
         }
    -    Instant stopTime = Instant.now();
    -    Instant startTime = sessionStartTimes.remove(sessionId);
    -    if (startTime != null) {
    -      // Find and update the existing history entry
    -      sessionHistory.stream()
    -          .filter(entry -> entry.getSessionId().equals(sessionId))
    -          .findFirst()
    -          .ifPresent(entry -> entry.setStopTime(stopTime));
    -      writeSessionHistoryToFile();
    -    }
    +
    +    // Keep only the last 100 completed sessions
    +    List<SessionHistoryEntry> completedSessions =
    +        sessionHistory.stream()
    +            .filter(entry -> entry.getStopTime() != null)
    +            .sorted(
    +                (a, b) ->
    +                    b.getStartTime().compareTo(a.getStartTime())) // Sort by start time descending
    +            .limit(100)
    +            .collect(Collectors.toList());
    +
    +    // Keep all ongoing sessions
    +    List<SessionHistoryEntry> ongoingSessions =
    +        sessionHistory.stream()
    +            .filter(entry -> entry.getStopTime() == null)
    +            .collect(Collectors.toList());
    +
    +    // Clear and rebuild the history queue
    +    sessionHistory.clear();
    +    sessionHistory.addAll(completedSessions);
    +    sessionHistory.addAll(ongoingSessions);
    +
    +    // Write the cleaned history to file
    +    writeSessionHistoryToFile();
       }

    The session history queue can grow unbounded over time, potentially causing
    memory issues in long-running nodes. Consider implementing a size limit or
    cleanup mechanism to prevent excessive memory usage.

    java/src/org/openqa/selenium/grid/node/local/LocalNode.java [1136-1144]

     private void recordSessionStart(SessionId sessionId) {
       if (!isSessionOwner(sessionId)) {
         return;
       }
       Instant startTime = Instant.now();
       sessionStartTimes.put(sessionId, startTime);
       sessionHistory.add(new SessionHistoryEntry(sessionId, startTime, null));
    +  
    +  // Limit history size to prevent memory issues
    +  while (sessionHistory.size() > 1000) {
    +    sessionHistory.poll();
    +  }
    +  
       writeSessionHistoryToFile();
     }

    [Suggestion processed]

    Suggestion importance[1-10]: 8

    __

    Why: The suggestion correctly identifies that the sessionHistory queue can grow indefinitely, which could lead to memory issues in long-running nodes. Proposing a mechanism to limit its size is a valuable improvement for the system's stability and robustness.

    Medium

    @SeleniumHQ SeleniumHQ deleted a comment from qodo-merge-pro bot Jun 8, 2025
    VietND96 and others added 3 commits June 9, 2025 03:33
    Co-authored-by: qodo-merge-pro[bot] <151058649+qodo-merge-pro[bot]@users.noreply.github.com>
    Co-authored-by: qodo-merge-pro[bot] <151058649+qodo-merge-pro[bot]@users.noreply.github.com>
    Copy link
    Contributor

    qodo-merge-pro bot commented Jun 8, 2025

    CI Feedback 🧐

    (Feedback updated until commit 0b19339)

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

    Action: Ruby / Local Tests (firefox, windows) / Local Tests (firefox, windows)

    Failed stage: Run Bazel [❌]

    Failed test name: Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when current window is closed

    Failure summary:

    The action failed because the test //rb/spec/integration/selenium/webdriver:target_locator-firefox
    failed consistently across 3 attempts. The specific test that failed was
    "Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when
    current window is closed" which threw a Selenium::WebDriver::Error::InvalidArgumentError with the
    message "invalid type: null, expected a string at line 1 column 14". The error occurred when trying
    to switch to a window using driver.switch_to.window(handle) in the file
    ./rb/spec/integration/selenium/webdriver/target_locator_spec.rb at line 235. The test appears to be
    passing a null value instead of a valid window handle string to the window switching method.

    Relevant error logs:
    1:  ##[group]Runner Image Provisioner
    2:  Hosted Compute Agent
    ...
    
    609:  -> Locally signed 5 keys.
    610:  ==> Importing owner trust values...
    611:  gpg: setting ownertrust to 4
    612:  gpg: setting ownertrust to 4
    613:  gpg: setting ownertrust to 4
    614:  gpg: setting ownertrust to 4
    615:  gpg: setting ownertrust to 4
    616:  ==> Disabling revoked keys in keyring...
    617:  -> Disabled 4 keys.
    618:  ==> Updating trust database...
    619:  gpg: marginals needed: 3  completes needed: 1  trust model: pgp
    620:  gpg: depth: 0  valid:   1  signed:   5  trust: 0-, 0q, 0n, 0m, 0f, 1u
    621:  gpg: depth: 1  valid:   5  signed:   7  trust: 0-, 0q, 0n, 5m, 0f, 0u
    622:  gpg: depth: 2  valid:   4  signed:   2  trust: 4-, 0q, 0n, 0m, 0f, 0u
    623:  gpg: next trustdb check due at 2025-08-13
    624:  gpg: error retrieving '[email protected]' via WKD: No data
    625:  gpg: error reading key: No data
    626:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    627:  gpg: key F40D263ECA25678A: "Alexey Pavlov (Alexpux) <[email protected]>" not changed
    628:  gpg: Total number processed: 1
    629:  gpg:              unchanged: 1
    630:  gpg: error retrieving '[email protected]' via WKD: No data
    631:  gpg: error reading key: No data
    632:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    633:  gpg: key 790AE56A1D3CFDDC: "David Macek (MSYS2 master key) <[email protected]>" not changed
    634:  gpg: Total number processed: 1
    635:  gpg:              unchanged: 1
    636:  gpg: error retrieving '[email protected]' via WKD: No data
    637:  gpg: error reading key: No data
    638:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    639:  gpg: key DA7EF2ABAEEA755C: "Martell Malone (martell) <[email protected]>" not changed
    640:  gpg: Total number processed: 1
    641:  gpg:              unchanged: 1
    642:  gpg: error retrieving '[email protected]' via WKD: No data
    643:  gpg: error reading key: No data
    644:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    645:  gpg: key 755B8182ACD22879: "Christoph Reiter (MSYS2 master key) <[email protected]>" not changed
    646:  gpg: Total number processed: 1
    647:  gpg:              unchanged: 1
    648:  gpg: error retrieving '[email protected]' via WKD: No data
    649:  gpg: error reading key: No data
    650:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    651:  gpg: key 9F418C233E652008: "Ignacio Casal Quinteiro <[email protected]>" not changed
    652:  gpg: Total number processed: 1
    653:  gpg:              unchanged: 1
    654:  gpg: error retrieving '[email protected]' via WKD: No data
    655:  gpg: error reading key: No data
    656:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    657:  gpg: key BBE514E53E0D0813: "Ray Donnelly (MSYS2 Developer - master key) <[email protected]>" not changed
    658:  gpg: Total number processed: 1
    659:  gpg:              unchanged: 1
    660:  gpg: error retrieving '[email protected]' via WKD: No data
    661:  gpg: error reading key: No data
    662:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    663:  gpg: key 5F92EFC1A47D45A1: "Alexey Pavlov (Alexpux) <[email protected]>" not changed
    664:  gpg: Total number processed: 1
    665:  gpg:              unchanged: 1
    666:  gpg: error retrieving '[email protected]' via WKD: No data
    667:  gpg: error reading key: No data
    668:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    669:  gpg: key 974C8BE49078F532: "David Macek <[email protected]>" not changed
    670:  gpg: Total number processed: 1
    671:  gpg:              unchanged: 1
    672:  gpg: error retrieving '[email protected]' via WKD: No data
    673:  gpg: error reading key: No data
    674:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    675:  gpg: key FA11531AA0AA7F57: "Christoph Reiter (MSYS2 development key) <[email protected]>" not changed
    676:  gpg: Total number processed: 1
    677:  gpg:              unchanged: 1
    678:  gpg: no valid OpenPGP data found.
    679:  gpg: Total number processed: 0
    680:  gpg: error retrieving '[email protected]' via WKD: No fingerprint
    681:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    682:  gpg: key 794DCF97F93FC717: "Martell Malone (martell) <[email protected]>" not changed
    683:  gpg: Total number processed: 1
    684:  gpg:              unchanged: 1
    685:  gpg: error retrieving '[email protected]' via WKD: No data
    686:  gpg: error reading key: No data
    687:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    688:  gpg: key D595C9AB2C51581E: "Martell Malone (MSYS2 Developer) <[email protected]>" not changed
    689:  gpg: Total number processed: 1
    690:  gpg:              unchanged: 1
    691:  gpg: error retrieving '[email protected]' via WKD: No data
    692:  gpg: error reading key: No data
    693:  gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
    ...
    
    825:  �[32mINFO: �[0mFrom Compiling absl/numeric/int128.cc [for tool]:
    826:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    827:  �[32mINFO: �[0mFrom Compiling absl/base/internal/throw_delegate.cc [for tool]:
    828:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    829:  �[32mINFO: �[0mFrom Compiling absl/base/internal/spinlock_wait.cc [for tool]:
    830:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    831:  �[32mINFO: �[0mFrom Compiling absl/base/internal/unscaledcycleclock.cc [for tool]:
    832:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    833:  �[32mINFO: �[0mFrom Compiling absl/base/internal/thread_identity.cc [for tool]:
    834:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    835:  �[32mINFO: �[0mFrom Compiling absl/base/internal/sysinfo.cc [for tool]:
    836:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    837:  �[32mINFO: �[0mFrom Compiling absl/base/internal/spinlock.cc [for tool]:
    838:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    839:  �[32m[337 / 1,087]�[0m Creating source manifest for //rb/spec/integration/selenium/webdriver:manager-firefox; 0s local ... (3 actions, 1 running)
    840:  �[32mINFO: �[0mFrom Compiling absl/base/internal/strerror.cc [for tool]:
    841:  cl : Command line warning D9002 : ignoring unknown option '-std=c++14'
    ...
    
    1853:  * `Zip::DOSTime`
    1854:  Run your test suite with the `RUBYZIP_V3_API_WARN` environment
    1855:  variable set to see warnings about usage of the old API. This will
    1856:  help you to identify any changes that you need to make to your code.
    1857:  See https://github.com/rubyzip/rubyzip/wiki/Updating-to-version-3.x for
    1858:  more information.
    1859:  Please ensure that your Gemfiles and .gemspecs are suitably restrictive
    1860:  to avoid an unexpected breakage when 3.0 is released (e.g. ~> 2.3.0).
    1861:  See https://github.com/rubyzip/rubyzip for details. The Changelog also
    1862:  lists other enhancements and bugfixes that have been implemented since
    1863:  version 2.3.0.
    1864:  2 installed gems you directly depend on are looking for funding.
    1865:  Run `bundle fund` for details
    1866:  �[32m[1,089 / 1,090]�[0m Running bundle install (@bundle//:bundle); 427s local, disk-cache
    1867:  �[32m[1,090 / 1,090]�[0m no actions running
    1868:  �[32m[1,090 / 1,107]�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:error-firefox
    1869:  �[32m[1,090 / 1,111]�[0m [Prepa] Testing //rb/spec/integration/selenium/webdriver:error-firefox ... (4 actions, 0 running)
    1870:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver:error-firefox; 0s disk-cache ... (4 actions, 0 running)
    1871:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver:error-firefox; 9s disk-cache ... (4 actions, 0 running)
    1872:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver:error-firefox; 39s disk-cache ... (4 actions, 0 running)
    1873:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver:error-firefox; 99s disk-cache ... (4 actions, 0 running)
    1874:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver:error-firefox; 160s disk-cache ... (4 actions, 0 running)
    1875:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver:error-firefox; 210s disk-cache ... (4 actions, 0 running)
    1876:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver:error-firefox; 211s disk-cache ... (4 actions, 1 running)
    1877:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:service-firefox; 2s local, disk-cache ... (4 actions, 1 running)
    1878:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:service-firefox; 9s local, disk-cache ... (4 actions, 1 running)
    1879:  �[32m[1,090 / 1,111]�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:service-firefox; 22s local, disk-cache ... (4 actions, 2 running)
    1880:  �[32m[1,091 / 1,111]�[0m 1 / 27 tests;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:error-firefox; 21s ... (4 actions, 1 running)
    1881:  �[32m[1,091 / 1,111]�[0m 1 / 27 tests;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:target_locator-firefox; 28s ... (4 actions, 2 running)
    ...
    
    1884:  �[32m[1,092 / 1,111]�[0m 2 / 27 tests;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:target_locator-firefox; 39s ... (4 actions, 1 running)
    1885:  �[32m[1,092 / 1,111]�[0m 2 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 29s disk-cache ... (4 actions, 2 running)
    1886:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 31s disk-cache ... (4 actions, 1 running)
    1887:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 41s disk-cache ... (4 actions, 1 running)
    1888:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 71s disk-cache ... (4 actions, 1 running)
    1889:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:target_locator-firefox (see C:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/target_locator-firefox/test_attempts/attempt_1.log)
    1890:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 72s disk-cache ... (4 actions, 1 running)
    1891:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 73s disk-cache ... (4 actions, 1 running)
    1892:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 118s disk-cache ... (4 actions, 1 running)
    1893:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:target_locator-firefox (see C:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/target_locator-firefox/test_attempts/attempt_2.log)
    1894:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 119s disk-cache ... (4 actions, 1 running)
    1895:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 120s disk-cache ... (4 actions, 1 running)
    1896:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 132s disk-cache ... (4 actions, 1 running)
    1897:  �[32m[1,093 / 1,111]�[0m 3 / 27 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 161s disk-cache ... (4 actions, 1 running)
    1898:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:target_locator-firefox (see C:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/target_locator-firefox/test.log)
    1899:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver:target_locator-firefox (Summary)
    1900:  C:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/target_locator-firefox/test.log
    ...
    
    1915:  switches to a frame directly
    1916:  switches to a frame by Element
    1917:  switches to parent frame
    1918:  switches to a window and execute a block when current window is closed
    1919:  switches to default content
    1920:  when switching windows
    1921:  switches to a window and back when given a block
    1922:  handles exceptions inside the block
    1923:  switches to a window without a block
    1924:  uses the original window if the block closes the popup
    1925:  #new_window
    1926:  switches to a new window
    1927:  switches to a new tab
    1928:  raises exception when the new window type is not recognized
    1929:  switches to the new window then close it when given a block
    1930:  does not error if switching to a new window with a block that closes window
    1931:  with more than two windows
    1932:  closes current window via block
    1933:  closes another window
    1934:  iterates over open windows when current window is not closed
    1935:  iterates over open windows when current window is closed (FAILED - 1)
    1936:  alerts
    1937:  allows the user to accept an alert
    1938:  allows the user to dismiss an alert
    1939:  allows the user to set the value of a prompt
    1940:  allows the user to get the text of an alert
    1941:  raises when calling #text on a closed alert
    1942:  raises NoAlertOpenError if no alert is present
    1943:  unhandled alert error
    1944:  raises an UnexpectedAlertOpenError if an alert has not been dealt with
    1945:  Failures:
    1946:  1) Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when current window is closed
    1947:  Failure/Error: driver.switch_to.window(handle)
    1948:  Selenium::WebDriver::Error::InvalidArgumentError:
    1949:  invalid type: null, expected a string at line 1 column 14
    1950:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    1951:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    1952:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    1953:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    1954:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `new'
    1955:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    1956:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    1957:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    1958:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    1959:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:193:in `switch_to_window'
    1960:  # ./rb/lib/selenium/webdriver/common/target_locator.rb:108:in `window'
    1961:  # ./rb/spec/integration/selenium/webdriver/target_locator_spec.rb:235:in `block (3 levels) in <module:WebDriver>'
    1962:  # ------------------
    1963:  # --- Caused by: ---
    1964:  # Selenium::WebDriver::Error::WebDriverError:
    1965:  #   
    1966:  Finished in 35.06 seconds (files took 1.43 seconds to load)
    1967:  26 examples, 1 failure
    1968:  Failed examples:
    1969:  rspec ./rb/spec/integration/selenium/webdriver/target_locator_spec.rb:219 # Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when current window is closed
    ...
    
    1982:  switches to a frame directly
    1983:  switches to a frame by Element
    1984:  switches to parent frame
    1985:  switches to a window and execute a block when current window is closed
    1986:  switches to default content
    1987:  when switching windows
    1988:  switches to a window and back when given a block
    1989:  handles exceptions inside the block
    1990:  switches to a window without a block
    1991:  uses the original window if the block closes the popup
    1992:  #new_window
    1993:  switches to a new window
    1994:  switches to a new tab
    1995:  raises exception when the new window type is not recognized
    1996:  switches to the new window then close it when given a block
    1997:  does not error if switching to a new window with a block that closes window
    1998:  with more than two windows
    1999:  closes current window via block
    2000:  closes another window
    2001:  iterates over open windows when current window is not closed (FAILED - 1)
    2002:  iterates over open windows when current window is closed
    2003:  alerts
    2004:  allows the user to accept an alert
    2005:  allows the user to dismiss an alert
    2006:  allows the user to set the value of a prompt
    2007:  allows the user to get the text of an alert
    2008:  raises when calling #text on a closed alert
    2009:  raises NoAlertOpenError if no alert is present
    2010:  unhandled alert error
    2011:  raises an UnexpectedAlertOpenError if an alert has not been dealt with
    2012:  Failures:
    2013:  1) Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when current window is not closed
    2014:  Failure/Error: driver.switch_to.window(handle)
    2015:  Selenium::WebDriver::Error::InvalidArgumentError:
    2016:  invalid type: null, expected a string at line 1 column 14
    2017:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2018:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2019:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2020:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2021:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `new'
    2022:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2023:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2024:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2025:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2026:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:193:in `switch_to_window'
    2027:  # ./rb/lib/selenium/webdriver/common/target_locator.rb:108:in `window'
    2028:  # ./rb/spec/integration/selenium/webdriver/target_locator_spec.rb:215:in `block (3 levels) in <module:WebDriver>'
    2029:  # ------------------
    2030:  # --- Caused by: ---
    2031:  # Selenium::WebDriver::Error::WebDriverError:
    2032:  #   
    2033:  Finished in 39.23 seconds (files took 0.99789 seconds to load)
    2034:  26 examples, 1 failure
    2035:  Failed examples:
    2036:  rspec ./rb/spec/integration/selenium/webdriver/target_locator_spec.rb:200 # Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when current window is not closed
    ...
    
    2049:  switches to a frame directly
    2050:  switches to a frame by Element
    2051:  switches to parent frame
    2052:  switches to a window and execute a block when current window is closed
    2053:  switches to default content
    2054:  when switching windows
    2055:  switches to a window and back when given a block
    2056:  handles exceptions inside the block
    2057:  switches to a window without a block
    2058:  uses the original window if the block closes the popup
    2059:  #new_window
    2060:  switches to a new window
    2061:  switches to a new tab
    2062:  raises exception when the new window type is not recognized
    2063:  switches to the new window then close it when given a block
    2064:  does not error if switching to a new window with a block that closes window
    2065:  with more than two windows
    2066:  closes current window via block
    2067:  closes another window
    2068:  iterates over open windows when current window is not closed
    2069:  iterates over open windows when current window is closed (FAILED - 1)
    2070:  alerts
    2071:  allows the user to accept an alert
    2072:  allows the user to dismiss an alert
    2073:  allows the user to set the value of a prompt
    2074:  allows the user to get the text of an alert
    2075:  raises when calling #text on a closed alert
    2076:  raises NoAlertOpenError if no alert is present
    2077:  unhandled alert error
    2078:  raises an UnexpectedAlertOpenError if an alert has not been dealt with
    2079:  Failures:
    2080:  1) Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when current window is closed
    2081:  Failure/Error: driver.switch_to.window(handle)
    2082:  Selenium::WebDriver::Error::InvalidArgumentError:
    2083:  invalid type: null, expected a string at line 1 column 14
    2084:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    2085:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    2086:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
    2087:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
    2088:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `new'
    2089:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:103:in `create_response'
    2090:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
    2091:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:68:in `call'
    2092:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:625:in `execute'
    2093:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:193:in `switch_to_window'
    2094:  # ./rb/lib/selenium/webdriver/common/target_locator.rb:108:in `window'
    2095:  # ./rb/spec/integration/selenium/webdriver/target_locator_spec.rb:235:in `block (3 levels) in <module:WebDriver>'
    2096:  # ------------------
    2097:  # --- Caused by: ---
    2098:  # Selenium::WebDriver::Error::WebDriverError:
    2099:  #   
    2100:  Finished in 33.38 seconds (files took 1.02 seconds to load)
    2101:  26 examples, 1 failure
    2102:  Failed examples:
    2103:  rspec ./rb/spec/integration/selenium/webdriver/target_locator_spec.rb:219 # Selenium::WebDriver::TargetLocator with more than two windows iterates over open windows when current window is closed
    2104:  ================================================================================
    2105:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 162s disk-cache ... (4 actions, 0 running)
    2106:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:action_builder-firefox; 172s disk-cache ... (4 actions, 0 running)
    2107:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:network-firefox; 170s disk-cache ... (4 actions, 0 running)
    2108:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:network-firefox; 171s disk-cache ... (4 actions, 1 running)
    2109:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:network-firefox; 194s disk-cache ... (4 actions, 1 running)
    2110:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:driver-firefox; 182s disk-cache ... (4 actions, 1 running)
    2111:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 73s disk-cache ... (4 actions, 1 running)
    2112:  �[32m[1,094 / 1,111]�[0m 4 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 76s disk-cache ... (4 actions, 2 running)
    2113:  �[32m[1,095 / 1,111]�[0m 5 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 77s disk-cache ... (4 actions, 1 running)
    2114:  �[32m[1,095 / 1,111]�[0m 5 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 87s disk-cache ... (4 actions, 1 running)
    2115:  �[32m[1,096 / 1,111]�[0m 6 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 89s disk-cache ... (4 actions, 1 running)
    2116:  �[32m[1,096 / 1,111]�[0m 6 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 99s disk-cache ... (4 actions, 1 running)
    2117:  �[32m[1,096 / 1,111]�[0m 6 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 130s disk-cache ... (4 actions, 1 running)
    2118:  �[32m[1,096 / 1,111]�[0m 6 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 131s disk-cache ... (4 actions, 1 running)
    2119:  �[32m[1,097 / 1,111]�[0m 7 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 132s disk-cache ... (4 actions, 0 running)
    2120:  �[32m[1,097 / 1,111]�[0m 7 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 143s disk-cache ... (4 actions, 0 running)
    2121:  �[32m[1,097 / 1,111]�[0m 7 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:listener-firefox; 173s disk-cache ... (4 actions, 0 running)
    2122:  �[32m[1,097 / 1,111]�[0m 7 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:manager-firefox; 107s disk-cache ... (4 actions, 0 running)
    2123:  �[32m[1,097 / 1,111]�[0m 7 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:manager-firefox; 109s disk-cache ... (4 actions, 1 running)
    2124:  �[32m[1,097 / 1,111]�[0m 7 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:manager-firefox; 138s disk-cache ... (4 actions, 1 running)
    2125:  �[32m[1,098 / 1,111]�[0m 8 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:manager-firefox; 139s disk-cache ... (4 actions, 0 running)
    2126:  �[32m[1,098 / 1,111]�[0m 8 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:manager-firefox; 150s disk-cache ... (4 actions, 0 running)
    2127:  �[32m[1,098 / 1,111]�[0m 8 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:manager-firefox; 180s disk-cache ... (4 actions, 0 running)
    2128:  �[32m[1,098 / 1,111]�[0m 8 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:takes_screenshot-firefox; 194s disk-cache ... (4 actions, 0 running)
    2129:  �[32m[1,098 / 1,111]�[0m 8 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:takes_screenshot-firefox; 195s disk-cache ... (4 actions, 1 running)
    2130:  �[32m[1,098 / 1,111]�[0m 8 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:element-firefox; 168s disk-cache ... (4 actions, 1 running)
    2131:  �[32m[1,098 / 1,111]�[0m 8 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:element-firefox; 183s disk-cache ... (4 actions, 2 running)
    2132:  �[32m[1,099 / 1,111]�[0m 9 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:element-firefox; 184s disk-cache ... (4 actions, 1 running)
    2133:  �[32m[1,099 / 1,111]�[0m 9 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:element-firefox; 195s disk-cache ... (4 actions, 1 running)
    2134:  �[32m[1,099 / 1,111]�[0m 9 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-firefox; 115s disk-cache ... (4 actions, 1 running)
    2135:  �[32m[1,099 / 1,111]�[0m 9 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-firefox; 131s disk-cache ... (4 actions, 2 running)
    2136:  �[32m[1,100 / 1,111]�[0m 10 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-firefox; 132s disk-cache ... (4 actions, 1 running)
    2137:  �[32m[1,100 / 1,111]�[0m 10 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-firefox; 143s disk-cache ... (4 actions, 1 running)
    2138:  �[32m[1,100 / 1,111]�[0m 10 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-firefox; 147s disk-cache ... (4 actions, 1 running)
    2139:  �[32m[1,101 / 1,111]�[0m 11 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-firefox; 148s disk-cache ... (4 actions, 0 running)
    2140:  �[32m[1,101 / 1,111]�[0m 11 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:timeout-firefox; 159s disk-cache ... (4 actions, 0 running)
    2141:  �[32m[1,101 / 1,111]�[0m 11 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 83s disk-cache ... (4 actions, 0 running)
    2142:  �[32m[1,101 / 1,111]�[0m 11 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 85s disk-cache ... (4 actions, 1 running)
    2143:  �[32m[1,101 / 1,111]�[0m 11 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 89s disk-cache ... (4 actions, 1 running)
    2144:  �[32m[1,101 / 1,111]�[0m 11 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 112s disk-cache ... (4 actions, 1 running)
    2145:  �[32m[1,102 / 1,111]�[0m 12 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 113s disk-cache ... (4 actions, 0 running)
    2146:  �[32m[1,102 / 1,111]�[0m 12 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 124s disk-cache ... (4 actions, 0 running)
    2147:  �[32m[1,102 / 1,111]�[0m 12 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 154s disk-cache ... (4 actions, 0 running)
    2148:  �[32m[1,102 / 1,111]�[0m 12 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox; 214s disk-cache ... (4 actions, 0 running)
    2149:  �[32m[1,102 / 1,111]�[0m 12 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox; 188s disk-cache ... (4 actions, 0 running)
    2150:  �[32m[1,102 / 1,111]�[0m 12 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox; 190s disk-cache ... (4 actions, 1 running)
    2151:  �[32m[1,102 / 1,111]�[0m 12 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox; 202s disk-cache ... (4 actions, 1 running)
    2152:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox; 203s disk-cache ... (4 actions, 0 running)
    2153:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox; 204s disk-cache ... (4 actions, 0 running)
    2154:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-firefox; 214s disk-cache ... (4 actions, 0 running)
    2155:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:profile-firefox; 207s disk-cache ... (4 actions, 0 running)
    2156:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:profile-firefox; 209s disk-cache ... (4 actions, 1 running)
    2157:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox; 158s disk-cache ... (4 actions, 1 running)
    2158:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:fedcm-firefox; 163s disk-cache ... (4 actions, 1 running)
    2159:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-firefox; 70s disk-cache ... (4 actions, 1 running)
    2160:  �[32m[1,103 / 1,111]�[0m 13 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-firefox; 71s disk-cache ... (4 actions, 2 running)
    2161:  �[32m[1,104 / 1,111]�[0m 14 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-firefox; 72s disk-cache ... (4 actions, 1 running)
    2162:  �[32m[1,104 / 1,111]�[0m 14 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-firefox; 83s disk-cache ... (4 actions, 1 running)
    2163:  �[32m[1,104 / 1,111]�[0m 14 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-firefox; 108s disk-cache ... (4 actions, 2 running)
    2164:  �[32m[1,105 / 1,111]�[0m 15 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-firefox; 109s disk-cache ... (4 actions, 1 running)
    2165:  �[32m[1,105 / 1,111]�[0m 15 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-firefox; 120s disk-cache ... (4 actions, 1 running)
    2166:  �[32m[1,105 / 1,111]�[0m 15 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 77s disk-cache ... (4 actions, 1 running)
    2167:  �[32m[1,105 / 1,111]�[0m 15 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 78s disk-cache ... (4 actions, 1 running)
    2168:  �[32m[1,105 / 1,111]�[0m 15 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 134s disk-cache ... (4 actions, 2 running)
    2169:  �[32m[1,106 / 1,111]�[0m 16 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 136s disk-cache ... (4 actions, 1 running)
    2170:  �[32m[1,106 / 1,111]�[0m 16 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 137s disk-cache ... (4 actions, 1 running)
    2171:  �[32m[1,106 / 1,111]�[0m 16 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 147s disk-cache ... (4 actions, 1 running)
    2172:  �[32m[1,106 / 1,111]�[0m 16 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 148s disk-cache ... (4 actions, 1 running)
    2173:  �[32m[1,107 / 1,111]�[0m 17 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 149s disk-cache ... (4 actions, 0 running)
    2174:  �[32m[1,107 / 1,111]�[0m 17 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:shadow_root-firefox; 114s disk-cache ... (4 actions, 0 running)
    2175:  �[32m[1,107 / 1,111]�[0m 17 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:shadow_root-firefox; 115s disk-cache ... (4 actions, 1 running)
    2176:  �[32m[1,107 / 1,111]�[0m 17 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:shadow_root-firefox; 122s disk-cache ... (4 actions, 1 running)
    2177:  �[32m[1,107 / 1,111]�[0m 17 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:shadow_root-firefox; 145s disk-cache ... (4 actions, 1 running)
    2178:  �[32m[1,108 / 1,111]�[0m 18 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:shadow_root-firefox; 146s disk-cache ... (3 actions, 0 running)
    2179:  �[32m[1,108 / 1,111]�[0m 18 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:shadow_root-firefox; 157s disk-cache ... (3 actions, 0 running)
    2180:  �[32m[1,108 / 1,111]�[0m 18 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 65s disk-cache ... (3 actions, 0 running)
    2181:  �[32m[1,108 / 1,111]�[0m 18 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 67s disk-cache ... (3 actions, 1 running)
    2182:  �[32m[1,108 / 1,111]�[0m 18 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 87s disk-cache ... (3 actions, 1 running)
    2183:  �[32m[1,108 / 1,111]�[0m 18 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 113s disk-cache ... (3 actions, 1 running)
    2184:  �[32m[1,109 / 1,111]�[0m 19 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 115s disk-cache ... (2 actions, 0 running)
    2185:  �[32m[1,109 / 1,111]�[0m 19 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 125s disk-cache ... (2 actions, 0 running)
    2186:  �[32m[1,109 / 1,111]�[0m 19 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:driver-firefox; 129s disk-cache ... (2 actions, 0 running)
    2187:  �[32m[1,109 / 1,111]�[0m 19 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:driver-firefox; 131s disk-cache ... (2 actions, 1 running)
    2188:  �[32m[1,109 / 1,111]�[0m 19 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 3s local, disk-cache ... (2 actions, 1 running)
    2189:  �[32m[1,109 / 1,111]�[0m 19 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 13s local, disk-cache ... (2 actions, 1 running)
    2190:  �[32m[1,109 / 1,111]�[0m 19 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-firefox; 19s local, disk-cache ... (2 actions running)
    2191:  �[32m[1,110 / 1,111]�[0m 20 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:driver-firefox; 1s local, disk-cache
    2192:  �[32m[1,110 / 1,111]�[0m 20 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:driver-firefox; 11s local, disk-cache
    2193:  �[32m[1,110 / 1,111]�[0m 20 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/firefox:driver-firefox; 30s local, disk-cache
    2194:  �[32m[1,111 / 1,112]�[0m 21 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-firefox; 0s disk-cache
    2195:  �[32m[1,111 / 1,112]�[0m 21 / 27 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-firefox
    2196:  �[32m[1,111 / 1,112]�[0m 21 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-firefox; 1s local, disk-cache
    2197:  �[32m[1,111 / 1,112]�[0m 21 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-firefox; 6s local, disk-cache
    2198:  �[32m[1,112 / 1,113]�[0m 22 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-firefox; 1s disk-cache
    2199:  �[32m[1,112 / 1,113]�[0m 22 / 27 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:script-firefox
    2200:  �[32m[1,112 / 1,113]�[0m 22 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-firefox; 1s local, disk-cache
    2201:  �[32m[1,112 / 1,113]�[0m 22 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-firefox; 5s local, disk-cache
    2202:  �[32m[1,113 / 1,114]�[0m 23 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-firefox; 0s disk-cache
    2203:  �[32m[1,113 / 1,114]�[0m 23 / 27 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-firefox
    2204:  �[32m[1,113 / 1,114]�[0m 23 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-firefox; 1s local, disk-cache
    2205:  �[32m[1,113 / 1,114]�[0m 23 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-firefox; 6s local, disk-cache
    2206:  �[32m[1,114 / 1,115]�[0m 24 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-firefox; 0s disk-cache
    2207:  �[32m[1,114 / 1,115]�[0m 24 / 27 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:network-firefox
    2208:  �[32m[1,114 / 1,115]�[0m 24 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-firefox; 1s local, disk-cache
    2209:  �[32m[1,114 / 1,115]�[0m 24 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-firefox; 6s local, disk-cache
    2210:  �[32m[1,115 / 1,116]�[0m 25 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-firefox; 0s disk-cache
    2211:  �[32m[1,115 / 1,116]�[0m 25 / 27 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:devtools-firefox
    2212:  �[32m[1,115 / 1,116]�[0m 25 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-firefox; 1s local, disk-cache
    2213:  �[32m[1,115 / 1,116]�[0m 25 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-firefox; 5s local, disk-cache
    2214:  �[32m[1,116 / 1,117]�[0m 26 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-firefox; 0s disk-cache
    2215:  �[32m[1,116 / 1,117]�[0m 26 / 27 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:bidi-firefox
    2216:  �[32m[1,116 / 1,117]�[0m 26 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-firefox; 1s local, disk-cache
    2217:  �[32m[1,116 / 1,117]�[0m 26 / 27 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-firefox; 6s local, disk-cache
    2218:  �[32mINFO: �[0mFound 27 test targets...
    2219:  �[32mINFO: �[0mElapsed time: 2301.343s, Critical Path: 830.84s
    2220:  �[32mINFO: �[0m1117 processes: 552 disk cache hit, 495 internal, 70 local.
    2221:  �[32mINFO: �[0mBuild completed, 1 test FAILED, 1117 total actions
    2222:  //rb/spec/integration/selenium/webdriver:action_builder-firefox          �[0m�[32mPASSED�[0m in 59.5s
    2223:  //rb/spec/integration/selenium/webdriver:bidi-firefox                    �[0m�[32mPASSED�[0m in 6.0s
    2224:  //rb/spec/integration/selenium/webdriver:devtools-firefox                �[0m�[32mPASSED�[0m in 5.9s
    2225:  //rb/spec/integration/selenium/webdriver:driver-firefox                  �[0m�[32mPASSED�[0m in 43.0s
    2226:  //rb/spec/integration/selenium/webdriver:element-firefox                 �[0m�[32mPASSED�[0m in 52.8s
    2227:  //rb/spec/integration/selenium/webdriver:error-firefox                   �[0m�[32mPASSED�[0m in 22.7s
    2228:  //rb/spec/integration/selenium/webdriver:fedcm-firefox                   �[0m�[32mPASSED�[0m in 99.1s
    ...
    
    2233:  //rb/spec/integration/selenium/webdriver:select-firefox                  �[0m�[32mPASSED�[0m in 19.2s
    2234:  //rb/spec/integration/selenium/webdriver:shadow_root-firefox             �[0m�[32mPASSED�[0m in 48.6s
    2235:  //rb/spec/integration/selenium/webdriver:takes_screenshot-firefox        �[0m�[32mPASSED�[0m in 32.4s
    2236:  //rb/spec/integration/selenium/webdriver:timeout-firefox                 �[0m�[32mPASSED�[0m in 26.5s
    2237:  //rb/spec/integration/selenium/webdriver:virtual_authenticator-firefox   �[0m�[32mPASSED�[0m in 13.5s
    2238:  //rb/spec/integration/selenium/webdriver:window-firefox                  �[0m�[32mPASSED�[0m in 30.4s
    2239:  //rb/spec/integration/selenium/webdriver/bidi:browsing_context-firefox   �[0m�[32mPASSED�[0m in 6.2s
    2240:  //rb/spec/integration/selenium/webdriver/bidi:log_inspector-firefox      �[0m�[32mPASSED�[0m in 6.0s
    2241:  //rb/spec/integration/selenium/webdriver/bidi:network-firefox            �[0m�[32mPASSED�[0m in 6.1s
    2242:  //rb/spec/integration/selenium/webdriver/bidi:script-firefox             �[0m�[32mPASSED�[0m in 6.0s
    2243:  //rb/spec/integration/selenium/webdriver/firefox:driver-firefox          �[0m�[32mPASSED�[0m in 30.1s
    2244:  //rb/spec/integration/selenium/webdriver/firefox:profile-firefox         �[0m�[32mPASSED�[0m in 36.8s
    2245:  //rb/spec/integration/selenium/webdriver/firefox:service-firefox         �[0m�[32mPASSED�[0m in 22.1s
    2246:  //rb/spec/integration/selenium/webdriver/remote:driver-firefox           �[0m�[32mPASSED�[0m in 8.5s
    2247:  //rb/spec/integration/selenium/webdriver/remote:element-firefox          �[0m�[32mPASSED�[0m in 15.5s
    2248:  //rb/spec/integration/selenium/webdriver:target_locator-firefox          �[0m�[31m�[1mFAILED�[0m in 3 out of 3 in 42.3s
    2249:  Stats over 3 runs: max = 42.3s, min = 40.2s, avg = 41.3s, dev = 0.8s
    2250:  C:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/target_locator-firefox/test.log
    2251:  C:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/target_locator-firefox/test_attempts/attempt_1.log
    2252:  C:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/target_locator-firefox/test_attempts/attempt_2.log
    2253:  Executed 27 out of 27 tests: 26 tests pass and �[0m�[31m�[1m1 fails locally�[0m.
    2254:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
    2255:  �[0m
    2256:  ##[error]Process completed with exit code 1.
    2257:  Post job cleanup.
    

    @VietND96 VietND96 requested a review from diemol June 8, 2025 20:52
    Copy link
    Member

    @diemol diemol left a comment

    Choose a reason for hiding this comment

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

    I don't understand the goal of the PR.

    I've also thought about keeping a history of the sessions, but my thought was to add an extra column with the session status to the current structure, and retrieve them through a query parameters through the same endpoint.

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    B-grid Everything grid and server related C-java Java Bindings Review effort 4/5
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    3 participants