[java] Fix 15634/ensure driver closed java by iampopovich ยท Pull Request #16038 ยท SeleniumHQ/selenium

User description

๐Ÿ”— Related Issues

partially fixes #15634 for java

๐Ÿ’ฅ What does this PR do?

similar changes as for python in #15636

๐Ÿ”ง Implementation Notes

This pull request enhances the robustness of driver service management in Selenium by ensuring services are properly stopped when session creation fails. It also introduces unit tests across multiple browser drivers to validate this behavior. The most important changes include updates to RemoteWebDriver for cleanup logic and new tests for driver service cleanup across Chrome, Edge, Firefox, and Safari.

Driver Service Cleanup Enhancements:

Unit Tests for Driver Service Cleanup:

๐Ÿ’ก Additional Considerations

๐Ÿ”„ Types of changes

  • Bug fix (backwards compatible)

PR Type

Bug fix, Tests


Description

  • Fix driver service cleanup when session creation fails

  • Add unit tests for service cleanup across Chrome, Edge, Firefox, Safari

  • Prevent zombie processes by stopping services on session failure

  • Enhance error handling in RemoteWebDriver session initialization


Changes diagram

flowchart LR
  A["Session Creation"] --> B["Try Block"]
  B --> C["Execute NEW_SESSION"]
  C --> D["Success?"]
  D -->|Yes| E["Set Capabilities & SessionId"]
  D -->|No| F["Catch Exception"]
  F --> G["Check DriverCommandExecutor"]
  G --> H["Stop Service"]
  H --> I["Throw Original Exception"]
Loading

Changes walkthrough ๐Ÿ“

Relevant files
Bug fix
RemoteWebDriver.java
Add session failure cleanup logic                                               

java/src/org/openqa/selenium/remote/RemoteWebDriver.java

  • Wrap session creation in try-catch block
  • Add service cleanup logic when session fails
  • Import DriverCommandExecutor for cleanup operations
  • Prevent zombie processes by stopping services
  • +46/-33 
    Tests
    ChromeDriverServiceCleanupTest.java
    Add Chrome service cleanup test                                                   

    java/test/org/openqa/selenium/chrome/ChromeDriverServiceCleanupTest.java

  • New test class for Chrome driver service cleanup
  • Test service stops when session creation fails
  • Use invalid user-data-dir to trigger failure
  • Verify service is not running after failure
  • +48/-0   
    EdgeDriverServiceTest.java
    Add Edge service cleanup test                                                       

    java/test/org/openqa/selenium/edge/EdgeDriverServiceTest.java

  • Add new test method for service cleanup
  • Import additional assertion methods
  • Test Edge driver service stops on failure
  • Use invalid user-data-dir argument
  • +20/-0   
    GeckoDriverServiceTest.java
    Add Firefox service cleanup test                                                 

    java/test/org/openqa/selenium/firefox/GeckoDriverServiceTest.java

  • Add service cleanup test for Firefox
  • Import assertion methods for testing
  • Use invalid binary path to trigger failure
  • Verify service stops after session failure
  • +21/-0   
    SafariDriverServiceTest.java
    Add Safari service cleanup test                                                   

    java/test/org/openqa/selenium/safari/SafariDriverServiceTest.java

  • Add service cleanup test for Safari
  • Import assertion utilities
  • Use invalid capability to cause failure
  • Test service stops when session creation fails
  • +21/-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.