Skip to content

Conversation

@asolntsev
Copy link
Contributor

@asolntsev asolntsev commented Jan 14, 2026

User description

  1. Reset mouse pointer to (0,0) before each test
  2. Wait until the next page gets loaded after click
  3. Extract a reusable method for checking background color which is tolerant to browsers ("rgb in Chrome" vs "rgbs in Firefox").

🔄 Types of changes

  • Bug fix (backwards compatible)

PR Type

Bug fix, Tests


Description

  • Reset mouse pointer to (0,0) before each test to eliminate flakiness

  • Extract reusable fuzzyMatchingOfCoordinates() and color() methods to WaitingConditions

  • Replace browser-specific color assertions with tolerance-aware color() method

  • Remove flaky test annotations and improve mouse tracker HTML page structure

  • Update coordinate assertions to match actual mouse positions after reset


Diagram Walkthrough

flowchart LR
  A["Test Setup"] -->|resetMousePointer| B["Mouse at 0,0"]
  B -->|fuzzyMatchingOfCoordinates| C["Coordinate Matching"]
  B -->|color method| D["Color Assertions"]
  C -->|tolerance 10px| E["Stable Tests"]
  D -->|rgb/rgba support| E
  F["WaitingConditions"] -->|new methods| G["Reusable Utilities"]
  G -->|used by| H["DefaultMouseTest<br/>PenPointerTest"]
Loading

File Walkthrough

Relevant files
Enhancement
WaitingConditions.java
Add reusable fuzzy coordinate and color matching conditions

java/test/org/openqa/selenium/WaitingConditions.java

  • Added fuzzyMatchingOfCoordinates() method with 10-pixel tolerance for
    coordinate matching
  • Added color() method supporting both RGB and RGBA color formats for
    cross-browser compatibility
  • Imported Colors and ExpectedConditions utilities
+38/-0   
mouse_interaction.html
Add mouse tracking and click event logging                             

common/src/web/mouse_interaction.html

  • Added JavaScript event listeners to track mouse position and clicks
  • Displays mouse coordinates and target element information in #bottom
    div
  • Supports test verification of mouse movement and click events
+12/-0   
Bug fix
DefaultMouseTest.java
Stabilize mouse tests with pointer reset and reusable conditions

java/test/org/openqa/selenium/bidi/input/DefaultMouseTest.java

  • Added resetMousePointer() method called in @BeforeEach to position
    mouse at (0,0)
  • Extracted fuzzyMatchingOfCoordinates() and color() calls from
    WaitingConditions
  • Removed @NeedsFreshDriver and @Ignore annotations from flaky tests
  • Updated testMoveToLocation() to wait for page load before assertions
  • Fixed testMoveRelativeToBody() to expect correct coordinates after
    reset
  • Replaced direct color assertions with color() method for browser
    tolerance
  • Added static MOUSE_TRACKER dimension constant
+34/-68 
DefaultMouseTest.java
Stabilize mouse tests with pointer reset and reusable conditions

java/test/org/openqa/selenium/interactions/DefaultMouseTest.java

  • Added resetMousePointer() method in @BeforeEach to position mouse at
    (0,0)
  • Replaced local fuzzyMatchingOfCoordinates() implementation with
    WaitingConditions version
  • Removed @NeedsFreshDriver and @Ignore annotations from flaky tests
  • Updated testMoveToLocation() to wait for page load before assertions
  • Fixed testMoveRelativeToBody() to expect correct coordinates after
    reset
  • Replaced direct color assertions with color() method for browser
    tolerance
+24/-53 
PenPointerTest.java
Stabilize pen pointer tests with reset and reusable conditions

java/test/org/openqa/selenium/interactions/PenPointerTest.java

  • Added resetMousePointer() method to position pen pointer at (0,0)
  • Extracted fuzzyMatchingOfCoordinates() to WaitingConditions
  • Replaced local fuzzyPositionMatching() with reusable color() method
  • Removed @NeedsFreshDriver and @Ignore annotations from flaky tests
  • Updated testMoveRelativeToBody() to use reset and expect correct
    coordinates
  • Replaced assertThatExceptionOfType() with assertThatThrownBy() for
    modern assertions
  • Simplified exception assertions with fluent API
  • Removed unused imports and cleaned up test code
+51/-95 
BasicMouseInterfaceTest.cs
Update expected coordinates after mouse reset                       

dotnet/test/common/Interactions/BasicMouseInterfaceTest.cs

  • Updated MoveRelativeToBody() test to expect coordinates (50, 100)
    instead of (40, 20)
  • Aligns with mouse pointer reset behavior
+1/-1     
mousePositionTracker.html
Refactor mouse tracker page for reliable coordinate tracking

common/src/web/mousePositionTracker.html

  • Refactored HTML structure with proper semantic layout and CSS
    positioning
  • Replaced jQuery with vanilla JavaScript for mouse tracking
  • Fixed mouse tracker positioning to start at (0,0) with absolute
    positioning
  • Added lang="en" attribute and <title> element
  • Improved CSS with box-sizing: border-box for consistent dimensions
  • Separated display area from tracker area for better test reliability
+36/-26 

@asolntsev asolntsev marked this pull request as draft January 14, 2026 05:30
@selenium-ci selenium-ci added C-java Java Bindings B-devtools Includes everything BiDi or Chrome DevTools related labels Jan 14, 2026
@qodo-code-review
Copy link
Contributor

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

🔴
Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status:
Missing edge handling: fuzzyMatchingOfCoordinates() parses element.getText() without validating the split result
or handling NumberFormatException, which can cause the wait condition to throw instead of
returning false when the text is malformed/empty.

Referred Code
public static ExpectedCondition<Boolean> fuzzyMatchingOfCoordinates(
    final WebElement element, final int x, final int y) {
  return new ExpectedCondition<>() {
    private static final int ALLOWED_DEVIATION_PIXELS = 10;

    @Override
    public Boolean apply(WebDriver ignored) {
      return fuzzyPositionMatching(x, y, element.getText());
    }

    private boolean fuzzyPositionMatching(int expectedX, int expectedY, String locationTuple) {
      String[] splitString = locationTuple.split("[,\\s]+", 2);
      int gotX = parseInt(splitString[0]);
      int gotY = parseInt(splitString[1]);

      return Math.abs(expectedX - gotX) < ALLOWED_DEVIATION_PIXELS
          && Math.abs(expectedY - gotY) < ALLOWED_DEVIATION_PIXELS;
    }

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status:
Unvalidated parsed input: The new coordinate parsing in fuzzyMatchingOfCoordinates() treats DOM text as trusted
numeric input without validation/fallback, which may be acceptable for test-only code but
should be confirmed against the project's input-handling expectations.

Referred Code
public static ExpectedCondition<Boolean> fuzzyMatchingOfCoordinates(
    final WebElement element, final int x, final int y) {
  return new ExpectedCondition<>() {
    private static final int ALLOWED_DEVIATION_PIXELS = 10;

    @Override
    public Boolean apply(WebDriver ignored) {
      return fuzzyPositionMatching(x, y, element.getText());
    }

    private boolean fuzzyPositionMatching(int expectedX, int expectedY, String locationTuple) {
      String[] splitString = locationTuple.split("[,\\s]+", 2);
      int gotX = parseInt(splitString[0]);
      int gotY = parseInt(splitString[1]);

      return Math.abs(expectedX - gotX) < ALLOWED_DEVIATION_PIXELS
          && Math.abs(expectedY - gotY) < ALLOWED_DEVIATION_PIXELS;
    }

Learn more about managing compliance generic rules or creating your own custom rules

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-code-review
Copy link
Contributor

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Use CSS value for color checks

Replace attributeToBe with a custom condition that uses element.getCssValue() to
correctly read the CSS color property for comparison.

java/test/org/openqa/selenium/WaitingConditions.java [324-329]

 public static ExpectedCondition<Boolean> color(
     final WebElement element, final String cssPropertyName, final Colors expectedColor) {
-  return ExpectedConditions.or(
-      attributeToBe(element, cssPropertyName, expectedColor.getColorValue().asRgb()),
-      attributeToBe(element, cssPropertyName, expectedColor.getColorValue().asRgba()));
+  return driver -> {
+    String actual = element.getCssValue(cssPropertyName);
+    String rgb   = expectedColor.getColorValue().asRgb();
+    String rgba  = expectedColor.getColorValue().asRgba();
+    return rgb.equals(actual) || rgba.equals(actual);
+  };
 }
  • Apply / Chat
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a fundamental bug where getAttribute is used instead of getCssValue for a CSS property, which would cause tests to fail, and provides a correct implementation.

High
Validate and handle malformed coordinate text

Add a try-catch block and a length check to the fuzzyPositionMatching method to
gracefully handle potential NumberFormatException and malformed coordinate
strings.

java/test/org/openqa/selenium/WaitingConditions.java [308-315]

 private boolean fuzzyPositionMatching(int expectedX, int expectedY, String locationTuple) {
-  String[] splitString = locationTuple.split("[,\\s]+", 2);
-  int gotX = parseInt(splitString[0]);
-  int gotY = parseInt(splitString[1]);
-
-  return Math.abs(expectedX - gotX) < ALLOWED_DEVIATION_PIXELS
-      && Math.abs(expectedY - gotY) < ALLOWED_DEVIATION_PIXELS;
+  try {
+    String[] parts = locationTuple.split("[,\\s]+", 2);
+    if (parts.length < 2) {
+      return false;
+    }
+    int gotX = parseInt(parts[0].trim());
+    int gotY = parseInt(parts[1].trim());
+    return Math.abs(expectedX - gotX) < ALLOWED_DEVIATION_PIXELS
+        && Math.abs(expectedY - gotY) < ALLOWED_DEVIATION_PIXELS;
+  } catch (NumberFormatException e) {
+    return false;
+  }
 }
  • Apply / Chat
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that the fuzzyPositionMatching method lacks error handling, which could cause tests to crash on malformed input, and proposes adding a try-catch block to make it more robust.

Medium
Reset mouse position using viewport coordinates

To reliably reset the mouse pointer to the top-left corner, use
moveToLocation(0, 0) instead of calculating an offset from the element.

java/test/org/openqa/selenium/bidi/input/DefaultMouseTest.java [419-425]

 private void resetMousePointer() {
-  WebElement body = driver.findElement(By.tagName("body"));
-  Dimension size = body.getSize();
   Collection<Sequence> moveToLeftUpperCorner =
-      getBuilder(driver).moveToElement(body, -size.width / 2, -size.height / 2).getSequences();
+      getBuilder(driver).moveToLocation(0, 0).getSequences();
   inputModule.perform(windowHandle, moveToLeftUpperCorner);
 }
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies an unreliable way to reset the mouse pointer and proposes using moveToLocation(0, 0), which is a more robust method based on viewport coordinates.

Medium
General
Use standard event coordinate properties

Replace the non-standard e.x and e.y event properties with the standard e.pageX
and e.pageY for reliable mouse coordinate tracking across different browsers.

common/src/web/mouse_interaction.html [99-104]

 window.addEventListener('mouseover', e => {
-  document.getElementById('bottom').innerText = `Mouse over (${e.x}, ${e.y}) ${describe(e.target)}`
-})
+  document.getElementById('bottom').innerText =
+    `Mouse over (${e.pageX}, ${e.pageY}) ${describe(e.target)}`;
+});
 window.addEventListener('click', e => {
-  document.getElementById('bottom').innerText = `Clicked at (${e.x}, ${e.y}) ${describe(e.target)}`
-})
+  document.getElementById('bottom').innerText =
+    `Clicked at (${e.pageX}, ${e.pageY}) ${describe(e.target)}`;
+});
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly points out the use of non-standard e.x/e.y properties and recommends using standard properties like e.pageX/e.pageY for better cross-browser compatibility.

Medium
Use modern event properties for coordinates

Replace the manual calculation of relative mouse coordinates using e.pageX and
element.offsetLeft with the more direct and reliable e.offsetX and e.offsetY
properties.

common/src/web/mousePositionTracker.html [35-39]

 mouseTracker.addEventListener('mousemove', (e) => {
-  const xPos = e.pageX - mouseTracker.offsetLeft;
-  const yPos = e.pageY - mouseTracker.offsetTop;
+  const xPos = e.offsetX;
+  const yPos = e.offsetY;
   document.getElementById('status').innerText = `${xPos}, ${yPos}`;
 });
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly points out that using e.offsetX and e.offsetY is more robust and modern for calculating mouse coordinates relative to an element, simplifying the code.

Low
Learned
best practice
Guard DOM element lookups

Check that the required DOM nodes exist before registering listeners and
updating text to prevent runtime errors if the page structure changes or loads
unexpectedly.

common/src/web/mousePositionTracker.html [33-40]

 (() => {
   const mouseTracker = document.getElementById('mousetracker');
+  const status = document.getElementById('status');
+  if (!mouseTracker || !status) {
+    return;
+  }
   mouseTracker.addEventListener('mousemove', (e) => {
     const xPos = e.pageX - mouseTracker.offsetLeft;
     const yPos = e.pageY - mouseTracker.offsetTop;
-    document.getElementById('status').innerText = `${xPos}, ${yPos}`;
+    status.innerText = `${xPos}, ${yPos}`;
   });
 })();
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why:
Relevant best practice - Add explicit validation/null-guards at integration boundaries (browser APIs/DOM) before use.

Low
  • More

@asolntsev asolntsev force-pushed the fix-flaky-tests-with-mouse-pointer branch from 4ef79e6 to 0e93740 Compare January 15, 2026 20:57
1. Reset mouse pointer to (0,0) before each test
2. Wait until the next page gets loaded after click
3. Extract a reusable method for checking background color which is tolerant to browsers ("rgb in Chrome" vs "rgbs in Firefox").
@asolntsev asolntsev force-pushed the fix-flaky-tests-with-mouse-pointer branch from 0e93740 to da93508 Compare January 16, 2026 07:09
@asolntsev asolntsev self-assigned this Jan 16, 2026
@asolntsev asolntsev marked this pull request as ready for review January 16, 2026 07:36
@asolntsev asolntsev requested review from diemol, nvborisenko and titusfortner and removed request for diemol and titusfortner January 16, 2026 07:36
@qodo-code-review
Copy link
Contributor

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status:
Unvalidated parsing: fuzzyMatchingOfCoordinates() parses element.getText() assuming a specific "x, y"
format without validating split length or handling non-numeric values, which can throw
runtime exceptions on unexpected DOM text.

Referred Code
public static ExpectedCondition<Boolean> fuzzyMatchingOfCoordinates(
    final WebElement element, final int x, final int y) {
  return new ExpectedCondition<>() {
    private static final int ALLOWED_DEVIATION_PIXELS = 10;

    @Override
    public Boolean apply(WebDriver ignored) {
      return fuzzyPositionMatching(x, y, element.getText());
    }

    private boolean fuzzyPositionMatching(int expectedX, int expectedY, String locationTuple) {
      String[] splitString = locationTuple.split("[,\\s]+", 2);
      int gotX = parseInt(splitString[0]);
      int gotY = parseInt(splitString[1]);

      return Math.abs(expectedX - gotX) < ALLOWED_DEVIATION_PIXELS
          && Math.abs(expectedY - gotY) < ALLOWED_DEVIATION_PIXELS;
    }

Learn more about managing compliance generic rules or creating your own custom rules

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-code-review
Copy link
Contributor

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Add defensive checks for parsing

Add checks in fuzzyPositionMatching to handle malformed locationTuple input,
preventing potential ArrayIndexOutOfBoundsException and NumberFormatException
errors by returning false.

java/test/org/openqa/selenium/WaitingConditions.java [308-315]

 private boolean fuzzyPositionMatching(int expectedX, int expectedY, String locationTuple) {
   String[] splitString = locationTuple.split("[,\\s]+", 2);
-  int gotX = parseInt(splitString[0]);
-  int gotY = parseInt(splitString[1]);
+  if (splitString.length < 2) {
+    return false;
+  }
+  try {
+    int gotX = parseInt(splitString[0]);
+    int gotY = parseInt(splitString[1]);
 
-  return Math.abs(expectedX - gotX) < ALLOWED_DEVIATION_PIXELS
-      && Math.abs(expectedY - gotY) < ALLOWED_DEVIATION_PIXELS;
+    return Math.abs(expectedX - gotX) < ALLOWED_DEVIATION_PIXELS
+        && Math.abs(expectedY - gotY) < ALLOWED_DEVIATION_PIXELS;
+  } catch (NumberFormatException e) {
+    return false;
+  }
 }
  • Apply / Chat
Suggestion importance[1-10]: 8

__

Why: This suggestion correctly identifies potential ArrayIndexOutOfBoundsException and NumberFormatException issues and provides robust error handling, which improves the reliability of the test utility method.

Medium
High-level
Unify test setup across files

The resetMousePointer() method is applied inconsistently. It should be used with
a @BeforeEach annotation in PenPointerTest to match the setup in other test
files, ensuring all tests start from a stable state.

Examples:

java/test/org/openqa/selenium/interactions/PenPointerTest.java [56-60]
  private void resetMousePointer() {
    WebElement body = driver.findElement(By.tagName("body"));
    Dimension size = body.getSize();
    setDefaultPen(driver).moveToElement(body, -size.width / 2, -size.height / 2).click().perform();
  }
java/test/org/openqa/selenium/interactions/PenPointerTest.java [287-300]
  public void testMoveRelativeToBody() {
    resetMousePointer();
    try {
      driver.get(pages.mouseTrackerPage);

      setDefaultPen(driver).moveByOffset(70, 180).perform();

      WebElement reporter = driver.findElement(By.id("status"));

      wait.until(fuzzyMatchingOfCoordinates(reporter, 70, 180));

 ... (clipped 4 lines)

Solution Walkthrough:

Before:

// In PenPointerTest.java
class PenPointerTest extends JupiterTestBase {
  private void resetMousePointer() {
    // ... implementation ...
  }

  @Test
  public void testMoveRelativeToBody() {
    resetMousePointer(); // Manual call at the start
    try {
      // ... test logic ...
    } finally {
      resetMousePointer(); // Manual call at the end
    }
  }
  // Other tests in the class do not have the pointer reset.
}

After:

// In PenPointerTest.java
class PenPointerTest extends JupiterTestBase {
  @BeforeEach
  private void resetMousePointer() {
    // ... implementation ...
  }

  @Test
  public void testMoveRelativeToBody() {
    // No manual call needed, @BeforeEach handles it.
    // ... test logic ...
  }
  // All tests in the class will now have the pointer reset.
}
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies an inconsistent application of the resetMousePointer method, which undermines the PR's goal of stabilizing tests and should be applied via @BeforeEach in PenPointerTest for uniform test setup.

Medium
General
Use bounding rectangle for mouse coords

Use getBoundingClientRect() and e.clientX/e.clientY to calculate mouse
coordinates relative to the tracker, which correctly accounts for scrolling,
borders, and padding.

common/src/web/mousePositionTracker.html [36-37]

-const xPos = e.pageX - mouseTracker.offsetLeft;
-const yPos = e.pageY - mouseTracker.offsetTop;
+const rect = mouseTracker.getBoundingClientRect();
+const xPos = Math.floor(e.clientX - rect.left);
+const yPos = Math.floor(e.clientY - rect.top);
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion proposes using getBoundingClientRect() for more accurate coordinate calculation, which is a robust method that correctly handles factors like scrolling and borders, improving the reliability of the mouse tracking logic.

Medium
Learned
best practice
Centralize shared pointer reset logic

Extract the repeated "reset pointer to top-left" logic into a shared test
utility/base method used by all mouse/pen tests to keep behavior consistent and
avoid drift.

java/test/org/openqa/selenium/bidi/input/DefaultMouseTest.java [419-425]

 private void resetMousePointer() {
-  WebElement body = driver.findElement(By.tagName("body"));
-  Dimension size = body.getSize();
-  Collection<Sequence> moveToLeftUpperCorner =
-      getBuilder(driver).moveToElement(body, -size.width / 2, -size.height / 2).getSequences();
-  inputModule.perform(windowHandle, moveToLeftUpperCorner);
+  MousePointerTestSupport.resetPointerToTopLeft(driver, inputModule, windowHandle, getBuilder(driver));
 }
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why:
Relevant best practice - Reduce duplication by centralizing shared behavior instead of repeating the same helper logic across multiple test classes.

Low
  • More

@asolntsev asolntsev added this to the 4.41.0 milestone Jan 17, 2026
@asolntsev asolntsev modified the milestones: 4.41.0, 4.40.0 Jan 17, 2026
@asolntsev asolntsev merged commit 96a10e5 into SeleniumHQ:trunk Jan 17, 2026
12 checks passed
@asolntsev asolntsev deleted the fix-flaky-tests-with-mouse-pointer branch January 17, 2026 22:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

B-devtools Includes everything BiDi or Chrome DevTools related C-java Java Bindings Review effort 2/5

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants