Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[grid] Improve SlotMatcher and SlotSelector on request browserVersion #14914

Merged
merged 7 commits into from
Dec 26, 2024

Conversation

VietND96
Copy link
Member

@VietND96 VietND96 commented Dec 18, 2024

User description

Thanks for contributing to Selenium!
A PR well described will help maintainers to quickly review and merge it

Before submitting your PR, please check our contributing guidelines.
Avoid large PRs, help reviewers by making them as simple and short as possible.

Description

This improvement helps autoscaling control strictly on a request without the capability to set browserVersion will be assigned to list Slots with top priority on stereotype without browserVersion or a latest browserVersion (based on SemVer comparison).

Improve DefaultSlotMatcher, where the request with cap browserVersion=130 can match to slot with stereotype browserVersion=130.0 (based on SemVer comparison return 0). Few corner case also covered e.g

    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131")).isEqualTo(0); -> match
    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131.0")).isEqualTo(0); -> match
    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131.0.6778")).isEqualTo(0); -> match
    assertThat(NodeStatus.semVerComparator("131.0.6778.85", "131.0.6778.95")).isEqualTo(1); -> not match

Motivation and Context

This pull request introduces several important changes to the Selenium Grid project, focusing on improving the way browser versions are compared and sorted. The changes include implementing a custom semantic version comparator, updating the slot selection logic, and adding relevant tests.

Improvements to browser version comparison:

Updates to slot selection logic:

Addition of tests:

Miscellaneous:

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • I have read the contributing document.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

PR Type

Enhancement


Description

Enhanced browser version handling in Selenium Grid with the following improvements:

  • Implemented semantic version comparison for better browser version matching

    • Supports partial version matching (e.g., "131" matches "131.0.6778.85")
    • Handles empty versions and special versions (e.g., "stable", "beta")
    • Provides descending order comparison for version sorting
  • Improved slot selection and matching logic:

    • Added browser version as a sorting criterion in slot selection
    • Prioritizes slots with empty browser versions
    • Enhanced version comparison in DefaultSlotMatcher
  • Added comprehensive test coverage:

    • Test cases for various version formats and edge cases
    • Tests for node ordering based on browser versions
    • Verification of slot selection behavior
  • Code quality improvements:

    • Added missing license header to Rust file
    • Enhanced code documentation

Changes walkthrough 📝

Relevant files
Enhancement
DefaultSlotMatcher.java
Improved browser version matching logic                                   

java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java

  • Enhanced browser version matching using semantic version comparison
  • Replaced direct version equality check with semVerComparator for more
    flexible matching
  • +3/-1     
    NodeStatus.java
    Added semantic version comparison functionality                   

    java/src/org/openqa/selenium/grid/data/NodeStatus.java

  • Added new getBrowserVersion method to retrieve minimum browser version
  • Implemented custom semVerComparator for semantic version comparison
  • Added helper method isNumber for version parsing
  • +59/-0   
    DefaultSlotSelector.java
    Enhanced slot selection with version-based sorting             

    java/src/org/openqa/selenium/grid/distributor/selector/DefaultSlotSelector.java

  • Added browser version comparison to slot selection sorting criteria
  • Enhanced slot selection to prioritize empty versions first
  • +5/-0     
    Tests
    NodeStatusTest.java
    Added tests for semantic version comparison                           

    java/test/org/openqa/selenium/grid/data/NodeStatusTest.java

  • Added comprehensive test cases for browser version comparison
  • Covered various version formats and edge cases
  • +21/-0   
    DefaultSlotSelectorTest.java
    Added tests for version-based node ordering                           

    java/test/org/openqa/selenium/grid/distributor/selector/DefaultSlotSelectorTest.java

  • Added test cases for node ordering by browser version
  • Added helper method for creating nodes with specific stereotypes
  • +51/-0   
    Documentation
    lock.rs
    Added missing license header                                                         

    rust/src/lock.rs

    • Added license header to the file
    +17/-0   

    💡 PR-Agent usage: Comment /help "your question" on any pull request to receive relevant information

    Copy link
    Contributor

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

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

    Possible Bug
    The semVerComparator implementation assumes all version parts are either numeric or strings, but doesn't handle mixed formats like "131.0a1". This could lead to incorrect version comparisons.

    Performance Issue
    The getBrowserVersion method uses parallelStream() which may have overhead for small collections. Consider using regular stream() unless parallel processing is really needed.

    Code Smell
    The browserVersionMatch logic has multiple conditions that could be simplified and made more readable by extracting helper methods.

    Copy link
    Contributor

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Score
    Possible issue
    Prevent integer overflow in version number parsing by using long instead of int

    Add input validation to prevent potential integer overflow when parsing version
    numbers. Consider using Long.parseLong() instead of Integer.parseInt() for larger
    version numbers.

    java/src/org/openqa/selenium/grid/data/NodeStatus.java [234-235]

    -int num1 = Integer.parseInt(part1);
    -int num2 = Integer.parseInt(part2);
    +long num1 = Long.parseLong(part1);
    +long num2 = Long.parseLong(part2);
    +if (num1 != num2) {
    +    return Long.compare(num2, num1); // Descending order
    +}
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This is a critical improvement that prevents potential integer overflow issues when parsing large version numbers, which could lead to incorrect version comparisons and system instability.

    8
    Handle potential number format exceptions in version comparison to prevent runtime crashes

    Add try-catch block around version number parsing to handle malformed version
    strings that contain valid numbers but exceed the maximum value.

    java/src/org/openqa/selenium/grid/data/NodeStatus.java [232-238]

     if (isPart1Numeric && isPart2Numeric) {
    -    // Compare numerically
    -    int num1 = Integer.parseInt(part1);
    -    int num2 = Integer.parseInt(part2);
    -    if (num1 != num2) {
    -      return Integer.compare(num2, num1); // Descending order
    +    try {
    +        // Compare numerically
    +        long num1 = Long.parseLong(part1);
    +        long num2 = Long.parseLong(part2);
    +        if (num1 != num2) {
    +            return Long.compare(num2, num1); // Descending order
    +        }
    +    } catch (NumberFormatException e) {
    +        // Fall back to string comparison if numbers are too large
    +        return part2.compareTo(part1);
         }
    • Apply this suggestion
    Suggestion importance[1-10]: 7

    Why: Important defensive programming that adds robustness by gracefully handling malformed version numbers, preventing potential runtime crashes in production.

    7
    Prevent null pointer exceptions in version string processing

    Add null check before splitting version strings to prevent NullPointerException, as
    getBrowserVersion() could potentially return null.

    java/src/org/openqa/selenium/grid/data/NodeStatus.java [221-222]

    +if (v1 == null) v1 = "";
    +if (v2 == null) v2 = "";
     String[] parts1 = v1.split("\\.");
     String[] parts2 = v2.split("\\.");
    • Apply this suggestion
    Suggestion importance[1-10]: 6

    Why: Valid defensive programming suggestion that prevents potential NullPointerException, though the current code context suggests null values are already handled by the empty string checks.

    6

    Copy link
    Contributor

    qodo-merge-pro bot commented Dec 18, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit ab99d84)

    Action: Python / Remote Tests (firefox) / Integration Tests (remote, firefox)

    Failed stage: Run Bazel [❌]

    Failed test name: test_move_window_position

    Failure summary:

    The action failed due to two test failures:
    1. test_move_window_position in api_example_tests.py
    failed because the window position was not set correctly - expected x position to be 50 but got 0
    2.
    Window positioning tests in window_tests.py failed with timeout exceptions when trying to set window
    position and rect

    The root cause appears to be an issue with window positioning functionality not working properly in
    the remote WebDriver implementation.

    Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    970:  Package 'php-symfony-debug-bundle' is not installed, so not removed
    971:  Package 'php-symfony-dependency-injection' is not installed, so not removed
    972:  Package 'php-symfony-deprecation-contracts' is not installed, so not removed
    973:  Package 'php-symfony-discord-notifier' is not installed, so not removed
    974:  Package 'php-symfony-doctrine-bridge' is not installed, so not removed
    975:  Package 'php-symfony-doctrine-messenger' is not installed, so not removed
    976:  Package 'php-symfony-dom-crawler' is not installed, so not removed
    977:  Package 'php-symfony-dotenv' is not installed, so not removed
    978:  Package 'php-symfony-error-handler' is not installed, so not removed
    ...
    
    1955:  Setting up fonts-terminus-otb (4.48-3.1) ...
    1956:  Processing triggers for install-info (6.8-4build1) ...
    1957:  Processing triggers for mailcap (3.70+nmu1ubuntu1) ...
    1958:  Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...
    1959:  Processing triggers for hicolor-icon-theme (0.17-2) ...
    1960:  Processing triggers for libc-bin (2.35-0ubuntu3.8) ...
    1961:  Processing triggers for man-db (2.10.2-1) ...
    1962:  Processing triggers for menu (2.1.47ubuntu4) ...
    1963:  /usr/share/menu/tk8.6: 1: Syntax error: word unexpected (expecting ")")
    1964:  /usr/share/menu/monodoc-http: 1: Syntax error: word unexpected (expecting ")")
    1965:  /usr/share/menu/telnet: 1: Syntax error: word unexpected (expecting ")")
    1966:  /usr/share/menu/dash: 1: Syntax error: word unexpected (expecting ")")
    1967:  /usr/share/menu/google-chrome.menu: 1: Syntax error: word unexpected (expecting ")")
    1968:  /usr/share/menu/microsoft-edge.menu: 1: Syntax error: word unexpected (expecting ")")
    1969:  /usr/share/menu/procps: 1: Syntax error: word unexpected (expecting ")")
    1970:  /usr/share/menu/psmisc: 1: Syntax error: word unexpected (expecting ")")
    1971:  /usr/share/menu/tcl8.6: 1: Syntax error: word unexpected (expecting ")")
    1972:  /usr/share/menu/bash: 1: Syntax error: word unexpected (expecting ")")
    1973:  Warning: Failed to open file(/usr/share/fluxbox/nls/C.UTF-8/fluxbox.cat)
    1974:  for translation, using default messages.
    1975:  Error: Couldn't connect to XServer:99
    ...
    
    2272:  �[32m[2,058 / 2,208]�[0m MergeJars java/src/org/openqa/selenium/manager/manager-project.jar; 4s disk-cache, linux-sandbox ... (4 actions, 3 running)
    2273:  �[32m[2,064 / 2,208]�[0m Executing genrule //java/src/org/openqa/selenium/devtools/v85:create-cdp-srcs; 5s disk-cache, linux-sandbox ... (4 actions, 3 running)
    2274:  �[32m[2,068 / 2,208]�[0m Executing genrule //java/src/org/openqa/selenium/devtools/v85:create-cdp-srcs; 6s disk-cache, linux-sandbox ... (4 actions, 3 running)
    2275:  �[32m[2,074 / 2,208]�[0m Executing genrule //java/src/org/openqa/selenium/devtools/v85:create-cdp-srcs; 7s disk-cache, linux-sandbox ... (4 actions, 3 running)
    2276:  �[32m[2,082 / 2,208]�[0m Action java/src/org/openqa/selenium/manager/libmanager-module.jar; 0s disk-cache, linux-sandbox
    2277:  �[32m[2,083 / 2,208]�[0m [Prepa] Extracting interface for jar bazel-out/k8-fastbuild/bin/java/src/org/openqa/selenium/manager/libmanager-module.jar
    2278:  �[32m[2,089 / 2,208]�[0m Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files); 1s disk-cache, multiplex-worker
    2279:  �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files):
    2280:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2281:  private final ErrorCodes errorCodes;
    2282:  ^
    2283:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2284:  this.errorCodes = new ErrorCodes();
    2285:  ^
    2286:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2287:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    2288:  ^
    2289:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2290:  ErrorCodes errorCodes = new ErrorCodes();
    2291:  ^
    2292:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2293:  ErrorCodes errorCodes = new ErrorCodes();
    2294:  ^
    2295:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2296:  response.setStatus(ErrorCodes.SUCCESS);
    2297:  ^
    2298:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2299:  response.setState(ErrorCodes.SUCCESS_STRING);
    2300:  ^
    2301:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2302:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    2303:  ^
    2304:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2305:  new ErrorCodes().getExceptionType((String) rawError);
    2306:  ^
    2307:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2308:  private final ErrorCodes errorCodes = new ErrorCodes();
    2309:  ^
    2310:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2311:  private final ErrorCodes errorCodes = new ErrorCodes();
    2312:  ^
    2313:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:55: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2314:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    2315:  ^
    2316:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:101: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2317:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2318:  ^
    2319:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:103: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2320:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2321:  ^
    2322:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:117: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2323:  response.setStatus(ErrorCodes.SUCCESS);
    2324:  ^
    2325:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:118: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2326:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2327:  ^
    2328:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:124: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2329:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    2330:  ^
    2331:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2332:  private final ErrorCodes errorCodes = new ErrorCodes();
    2333:  ^
    2334:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2335:  private final ErrorCodes errorCodes = new ErrorCodes();
    2336:  ^
    2337:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:93: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2338:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    2339:  ^
    2340:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:98: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2341:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    2342:  ^
    2343:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:145: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2344:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    2386:  �[32mINFO: �[0mFrom Testing //py:test-remote-test/selenium/webdriver/common/element_aria_label_tests.py:
    2387:  ==================== Test output for //py:test-remote-test/selenium/webdriver/common/element_aria_label_tests.py:
    2388:  ============================= test session starts ==============================
    2389:  platform linux -- Python 3.8.19, pytest-7.4.4, pluggy-1.3.0
    2390:  rootdir: /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/bin/py/test-remote-test/selenium/webdriver/common/element_aria_label_tests.py.runfiles/_main/py
    2391:  configfile: pyproject.toml
    2392:  plugins: instafail-0.5.0, trio-0.8.0, mock-3.12.0
    2393:  collected 1 item
    2394:  py/test/selenium/webdriver/common/element_aria_label_tests.py::test_should_return_accessible_name[remote] ERROR [100%]
    2395:  _________ ERROR at setup of test_should_return_accessible_name[remote] _________
    ...
    
    2407:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2408:  )
    2409:  def wait_for_server(url, timeout):
    2410:  start = time.time()
    2411:  while time.time() - start < timeout:
    2412:  try:
    2413:  urlopen(url)
    2414:  return 1
    2415:  except OSError:
    2416:  time.sleep(0.2)
    2417:  return 0
    2418:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    2419:  url = f"http://{_host}:{_port}/status"
    2420:  try:
    2421:  >           _socket.connect((_host, _port))
    2422:  E           ConnectionRefusedError: [Errno 111] Connection refused
    2423:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    2436:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2437:  )
    2438:  def wait_for_server(url, timeout):
    2439:  start = time.time()
    2440:  while time.time() - start < timeout:
    2441:  try:
    2442:  urlopen(url)
    2443:  return 1
    2444:  except OSError:
    ...
    
    2465:  "--selenium-manager",
    2466:  "true",
    2467:  "--enable-managed-downloads",
    2468:  "true",
    2469:  ]
    2470:  )
    2471:  print(f"Selenium server running as process: {process.pid}")
    2472:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    2473:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    2474:  E           assert 0
    2475:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7fc920cb7310>('http://localhost:4444/status', 10)
    2476:  py/conftest.py:314: AssertionError
    2477:  ---------------------------- Captured stdout setup -----------------------------
    2478:  Starting the Selenium server
    2479:  Selenium server running as process: 24938
    2480:  13:24:18.950 INFO [LoggingOptions.configureLogEncoding] - Using the system default encoding
    2481:  13:24:18.955 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
    2482:  13:24:20.373 INFO [NodeOptions.getSessionFactories] - Detected 4 available processors
    2483:  =========================== short test summary info ============================
    2484:  ERROR py/test/selenium/webdriver/common/element_aria_label_tests.py::test_should_return_accessible_name[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    2485:  assert 0
    2486:  +  where 0 = <function server.<locals>.wait_for_server at 0x7fc920cb7310>('http://localhost:4444/status', 10)
    2487:  ============================== 1 error in 10.12s ===============================
    ...
    
    2494:  �[32mINFO: �[0mFrom Testing //py:test-remote-test/selenium/webdriver/common/form_handling_tests.py:
    2495:  ==================== Test output for //py:test-remote-test/selenium/webdriver/common/form_handling_tests.py:
    2496:  ============================= test session starts ==============================
    2497:  platform linux -- Python 3.8.19, pytest-7.4.4, pluggy-1.3.0
    2498:  rootdir: /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/bin/py/test-remote-test/selenium/webdriver/common/form_handling_tests.py.runfiles/_main/py
    2499:  configfile: pyproject.toml
    2500:  plugins: instafail-0.5.0, trio-0.8.0, mock-3.12.0
    2501:  collected 24 items
    2502:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_click_on_submit_input_elements[remote] ERROR [  4%]
    2503:  _____ ERROR at setup of test_should_click_on_submit_input_elements[remote] _____
    ...
    
    2515:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2516:  )
    2517:  def wait_for_server(url, timeout):
    2518:  start = time.time()
    2519:  while time.time() - start < timeout:
    2520:  try:
    2521:  urlopen(url)
    2522:  return 1
    2523:  except OSError:
    2524:  time.sleep(0.2)
    2525:  return 0
    2526:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    2527:  url = f"http://{_host}:{_port}/status"
    2528:  try:
    2529:  >           _socket.connect((_host, _port))
    2530:  E           ConnectionRefusedError: [Errno 111] Connection refused
    2531:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    2544:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2545:  )
    2546:  def wait_for_server(url, timeout):
    2547:  start = time.time()
    2548:  while time.time() - start < timeout:
    2549:  try:
    2550:  urlopen(url)
    2551:  return 1
    2552:  except OSError:
    ...
    
    2573:  "--selenium-manager",
    2574:  "true",
    2575:  "--enable-managed-downloads",
    2576:  "true",
    2577:  ]
    2578:  )
    2579:  print(f"Selenium server running as process: {process.pid}")
    2580:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    2581:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    2582:  E           assert 0
    2583:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    2584:  py/conftest.py:314: AssertionError
    2585:  ---------------------------- Captured stdout setup -----------------------------
    2586:  Starting the Selenium server
    2587:  Selenium server running as process: 25056
    2588:  13:24:30.034 INFO [LoggingOptions.configureLogEncoding] - Using the system default encoding
    2589:  13:24:30.039 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
    2590:  13:24:30.584 INFO [NodeOptions.getSessionFactories] - Detected 4 available processors
    2591:  py/test/selenium/webdriver/common/form_handling_tests.py::test_clicking_on_unclickable_elements_does_nothing[remote] ERROR [  8%]
    2592:  _ ERROR at setup of test_clicking_on_unclickable_elements_does_nothing[remote] _
    ...
    
    2604:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2605:  )
    2606:  def wait_for_server(url, timeout):
    2607:  start = time.time()
    2608:  while time.time() - start < timeout:
    2609:  try:
    2610:  urlopen(url)
    2611:  return 1
    2612:  except OSError:
    2613:  time.sleep(0.2)
    2614:  return 0
    2615:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    2616:  url = f"http://{_host}:{_port}/status"
    2617:  try:
    2618:  >           _socket.connect((_host, _port))
    2619:  E           ConnectionRefusedError: [Errno 111] Connection refused
    2620:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    2633:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2634:  )
    2635:  def wait_for_server(url, timeout):
    2636:  start = time.time()
    2637:  while time.time() - start < timeout:
    2638:  try:
    2639:  urlopen(url)
    2640:  return 1
    2641:  except OSError:
    ...
    
    2662:  "--selenium-manager",
    2663:  "true",
    2664:  "--enable-managed-downloads",
    2665:  "true",
    2666:  ]
    2667:  )
    2668:  print(f"Selenium server running as process: {process.pid}")
    2669:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    2670:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    2671:  E           assert 0
    2672:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    2673:  py/conftest.py:314: AssertionError
    2674:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_click_image_buttons[remote] ERROR [ 12%]
    2675:  _____ ERROR at setup of test_should_be_able_to_click_image_buttons[remote] _____
    ...
    
    2687:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2688:  )
    2689:  def wait_for_server(url, timeout):
    2690:  start = time.time()
    2691:  while time.time() - start < timeout:
    2692:  try:
    2693:  urlopen(url)
    2694:  return 1
    2695:  except OSError:
    2696:  time.sleep(0.2)
    2697:  return 0
    2698:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    2699:  url = f"http://{_host}:{_port}/status"
    2700:  try:
    2701:  >           _socket.connect((_host, _port))
    2702:  E           ConnectionRefusedError: [Errno 111] Connection refused
    2703:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    2716:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2717:  )
    2718:  def wait_for_server(url, timeout):
    2719:  start = time.time()
    2720:  while time.time() - start < timeout:
    2721:  try:
    2722:  urlopen(url)
    2723:  return 1
    2724:  except OSError:
    ...
    
    2745:  "--selenium-manager",
    2746:  "true",
    2747:  "--enable-managed-downloads",
    2748:  "true",
    2749:  ]
    2750:  )
    2751:  print(f"Selenium server running as process: {process.pid}")
    2752:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    2753:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    2754:  E           assert 0
    2755:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    2756:  py/conftest.py:314: AssertionError
    2757:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_input_in_form[remote] ERROR [ 16%]
    2758:  __________ ERROR at setup of test_should_submit_input_in_form[remote] __________
    ...
    
    2770:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2771:  )
    2772:  def wait_for_server(url, timeout):
    2773:  start = time.time()
    2774:  while time.time() - start < timeout:
    2775:  try:
    2776:  urlopen(url)
    2777:  return 1
    2778:  except OSError:
    2779:  time.sleep(0.2)
    2780:  return 0
    2781:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    2782:  url = f"http://{_host}:{_port}/status"
    2783:  try:
    2784:  >           _socket.connect((_host, _port))
    2785:  E           ConnectionRefusedError: [Errno 111] Connection refused
    2786:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    2799:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2800:  )
    2801:  def wait_for_server(url, timeout):
    2802:  start = time.time()
    2803:  while time.time() - start < timeout:
    2804:  try:
    2805:  urlopen(url)
    2806:  return 1
    2807:  except OSError:
    ...
    
    2828:  "--selenium-manager",
    2829:  "true",
    2830:  "--enable-managed-downloads",
    2831:  "true",
    2832:  ]
    2833:  )
    2834:  print(f"Selenium server running as process: {process.pid}")
    2835:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    2836:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    2837:  E           assert 0
    2838:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    2839:  py/conftest.py:314: AssertionError
    2840:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_any_input_element_within_form[remote] ERROR [ 20%]
    2841:  __ ERROR at setup of test_should_submit_any_input_element_within_form[remote] __
    ...
    
    2853:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2854:  )
    2855:  def wait_for_server(url, timeout):
    2856:  start = time.time()
    2857:  while time.time() - start < timeout:
    2858:  try:
    2859:  urlopen(url)
    2860:  return 1
    2861:  except OSError:
    2862:  time.sleep(0.2)
    2863:  return 0
    2864:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    2865:  url = f"http://{_host}:{_port}/status"
    2866:  try:
    2867:  >           _socket.connect((_host, _port))
    2868:  E           ConnectionRefusedError: [Errno 111] Connection refused
    2869:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    2882:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2883:  )
    2884:  def wait_for_server(url, timeout):
    2885:  start = time.time()
    2886:  while time.time() - start < timeout:
    2887:  try:
    2888:  urlopen(url)
    2889:  return 1
    2890:  except OSError:
    ...
    
    2911:  "--selenium-manager",
    2912:  "true",
    2913:  "--enable-managed-downloads",
    2914:  "true",
    2915:  ]
    2916:  )
    2917:  print(f"Selenium server running as process: {process.pid}")
    2918:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    2919:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    2920:  E           assert 0
    2921:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    2922:  py/conftest.py:314: AssertionError
    2923:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_any_element_within_form[remote] ERROR [ 25%]
    2924:  _____ ERROR at setup of test_should_submit_any_element_within_form[remote] _____
    ...
    
    2936:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2937:  )
    2938:  def wait_for_server(url, timeout):
    2939:  start = time.time()
    2940:  while time.time() - start < timeout:
    2941:  try:
    2942:  urlopen(url)
    2943:  return 1
    2944:  except OSError:
    2945:  time.sleep(0.2)
    2946:  return 0
    2947:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    2948:  url = f"http://{_host}:{_port}/status"
    2949:  try:
    2950:  >           _socket.connect((_host, _port))
    2951:  E           ConnectionRefusedError: [Errno 111] Connection refused
    2952:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    2965:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    2966:  )
    2967:  def wait_for_server(url, timeout):
    2968:  start = time.time()
    2969:  while time.time() - start < timeout:
    2970:  try:
    2971:  urlopen(url)
    2972:  return 1
    2973:  except OSError:
    ...
    
    2994:  "--selenium-manager",
    2995:  "true",
    2996:  "--enable-managed-downloads",
    2997:  "true",
    2998:  ]
    2999:  )
    3000:  print(f"Selenium server running as process: {process.pid}")
    3001:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3002:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3003:  E           assert 0
    3004:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3005:  py/conftest.py:314: AssertionError
    3006:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_element_with_id_submit[remote] ERROR [ 29%]
    3007:  _____ ERROR at setup of test_should_submit_element_with_id_submit[remote] ______
    ...
    
    3019:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3020:  )
    3021:  def wait_for_server(url, timeout):
    3022:  start = time.time()
    3023:  while time.time() - start < timeout:
    3024:  try:
    3025:  urlopen(url)
    3026:  return 1
    3027:  except OSError:
    3028:  time.sleep(0.2)
    3029:  return 0
    3030:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3031:  url = f"http://{_host}:{_port}/status"
    3032:  try:
    3033:  >           _socket.connect((_host, _port))
    3034:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3035:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3048:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3049:  )
    3050:  def wait_for_server(url, timeout):
    3051:  start = time.time()
    3052:  while time.time() - start < timeout:
    3053:  try:
    3054:  urlopen(url)
    3055:  return 1
    3056:  except OSError:
    ...
    
    3077:  "--selenium-manager",
    3078:  "true",
    3079:  "--enable-managed-downloads",
    3080:  "true",
    3081:  ]
    3082:  )
    3083:  print(f"Selenium server running as process: {process.pid}")
    3084:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3085:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3086:  E           assert 0
    3087:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3088:  py/conftest.py:314: AssertionError
    3089:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_element_with_name_submit[remote] ERROR [ 33%]
    3090:  ____ ERROR at setup of test_should_submit_element_with_name_submit[remote] _____
    ...
    
    3102:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3103:  )
    3104:  def wait_for_server(url, timeout):
    3105:  start = time.time()
    3106:  while time.time() - start < timeout:
    3107:  try:
    3108:  urlopen(url)
    3109:  return 1
    3110:  except OSError:
    3111:  time.sleep(0.2)
    3112:  return 0
    3113:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3114:  url = f"http://{_host}:{_port}/status"
    3115:  try:
    3116:  >           _socket.connect((_host, _port))
    3117:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3118:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3131:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3132:  )
    3133:  def wait_for_server(url, timeout):
    3134:  start = time.time()
    3135:  while time.time() - start < timeout:
    3136:  try:
    3137:  urlopen(url)
    3138:  return 1
    3139:  except OSError:
    ...
    
    3160:  "--selenium-manager",
    3161:  "true",
    3162:  "--enable-managed-downloads",
    3163:  "true",
    3164:  ]
    3165:  )
    3166:  print(f"Selenium server running as process: {process.pid}")
    3167:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3168:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3169:  E           assert 0
    3170:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3171:  py/conftest.py:314: AssertionError
    3172:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_not_submit_button_outside_form[remote] ERROR [ 37%]
    3173:  _____ ERROR at setup of test_should_not_submit_button_outside_form[remote] _____
    ...
    
    3185:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3186:  )
    3187:  def wait_for_server(url, timeout):
    3188:  start = time.time()
    3189:  while time.time() - start < timeout:
    3190:  try:
    3191:  urlopen(url)
    3192:  return 1
    3193:  except OSError:
    3194:  time.sleep(0.2)
    3195:  return 0
    3196:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3197:  url = f"http://{_host}:{_port}/status"
    3198:  try:
    3199:  >           _socket.connect((_host, _port))
    3200:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3201:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3214:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3215:  )
    3216:  def wait_for_server(url, timeout):
    3217:  start = time.time()
    3218:  while time.time() - start < timeout:
    3219:  try:
    3220:  urlopen(url)
    3221:  return 1
    3222:  except OSError:
    ...
    
    3243:  "--selenium-manager",
    3244:  "true",
    3245:  "--enable-managed-downloads",
    3246:  "true",
    3247:  ]
    3248:  )
    3249:  print(f"Selenium server running as process: {process.pid}")
    3250:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3251:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3252:  E           assert 0
    3253:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3254:  py/conftest.py:314: AssertionError
    3255:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_enter_text_into_atext_area_by_setting_its_value[remote] ERROR [ 41%]
    3256:  _ ERROR at setup of test_should_be_able_to_enter_text_into_atext_area_by_setting_its_value[remote] _
    ...
    
    3268:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3269:  )
    3270:  def wait_for_server(url, timeout):
    3271:  start = time.time()
    3272:  while time.time() - start < timeout:
    3273:  try:
    3274:  urlopen(url)
    3275:  return 1
    3276:  except OSError:
    3277:  time.sleep(0.2)
    3278:  return 0
    3279:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3280:  url = f"http://{_host}:{_port}/status"
    3281:  try:
    3282:  >           _socket.connect((_host, _port))
    3283:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3284:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3297:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3298:  )
    3299:  def wait_for_server(url, timeout):
    3300:  start = time.time()
    3301:  while time.time() - start < timeout:
    3302:  try:
    3303:  urlopen(url)
    3304:  return 1
    3305:  except OSError:
    ...
    
    3326:  "--selenium-manager",
    3327:  "true",
    3328:  "--enable-managed-downloads",
    3329:  "true",
    3330:  ]
    3331:  )
    3332:  print(f"Selenium server running as process: {process.pid}")
    3333:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3334:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3335:  E           assert 0
    3336:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3337:  py/conftest.py:314: AssertionError
    3338:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_enter_data_into_form_fields[remote] ERROR [ 45%]
    3339:  ______ ERROR at setup of test_should_enter_data_into_form_fields[remote] _______
    ...
    
    3351:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3352:  )
    3353:  def wait_for_server(url, timeout):
    3354:  start = time.time()
    3355:  while time.time() - start < timeout:
    3356:  try:
    3357:  urlopen(url)
    3358:  return 1
    3359:  except OSError:
    3360:  time.sleep(0.2)
    3361:  return 0
    3362:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3363:  url = f"http://{_host}:{_port}/status"
    3364:  try:
    3365:  >           _socket.connect((_host, _port))
    3366:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3367:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3380:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3381:  )
    3382:  def wait_for_server(url, timeout):
    3383:  start = time.time()
    3384:  while time.time() - start < timeout:
    3385:  try:
    3386:  urlopen(url)
    3387:  return 1
    3388:  except OSError:
    ...
    
    3409:  "--selenium-manager",
    3410:  "true",
    3411:  "--enable-managed-downloads",
    3412:  "true",
    3413:  ]
    3414:  )
    3415:  print(f"Selenium server running as process: {process.pid}")
    3416:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3417:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3418:  E           assert 0
    3419:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3420:  py/conftest.py:314: AssertionError
    3421:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_select_acheck_box[remote] ERROR [ 50%]
    3422:  ______ ERROR at setup of test_should_be_able_to_select_acheck_box[remote] ______
    ...
    
    3434:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3435:  )
    3436:  def wait_for_server(url, timeout):
    3437:  start = time.time()
    3438:  while time.time() - start < timeout:
    3439:  try:
    3440:  urlopen(url)
    3441:  return 1
    3442:  except OSError:
    3443:  time.sleep(0.2)
    3444:  return 0
    3445:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3446:  url = f"http://{_host}:{_port}/status"
    3447:  try:
    3448:  >           _socket.connect((_host, _port))
    3449:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3450:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3463:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3464:  )
    3465:  def wait_for_server(url, timeout):
    3466:  start = time.time()
    3467:  while time.time() - start < timeout:
    3468:  try:
    3469:  urlopen(url)
    3470:  return 1
    3471:  except OSError:
    ...
    
    3492:  "--selenium-manager",
    3493:  "true",
    3494:  "--enable-managed-downloads",
    3495:  "true",
    3496:  ]
    3497:  )
    3498:  print(f"Selenium server running as process: {process.pid}")
    3499:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3500:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3501:  E           assert 0
    3502:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3503:  py/conftest.py:314: AssertionError
    3504:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_toggle_the_checked_state_of_acheckbox[remote] ERROR [ 54%]
    3505:  _ ERROR at setup of test_should_toggle_the_checked_state_of_acheckbox[remote] __
    ...
    
    3517:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3518:  )
    3519:  def wait_for_server(url, timeout):
    3520:  start = time.time()
    3521:  while time.time() - start < timeout:
    3522:  try:
    3523:  urlopen(url)
    3524:  return 1
    3525:  except OSError:
    3526:  time.sleep(0.2)
    3527:  return 0
    3528:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3529:  url = f"http://{_host}:{_port}/status"
    3530:  try:
    3531:  >           _socket.connect((_host, _port))
    3532:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3533:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3546:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3547:  )
    3548:  def wait_for_server(url, timeout):
    3549:  start = time.time()
    3550:  while time.time() - start < timeout:
    3551:  try:
    3552:  urlopen(url)
    3553:  return 1
    3554:  except OSError:
    ...
    
    3575:  "--selenium-manager",
    3576:  "true",
    3577:  "--enable-managed-downloads",
    3578:  "true",
    3579:  ]
    3580:  )
    3581:  print(f"Selenium server running as process: {process.pid}")
    3582:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3583:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3584:  E           assert 0
    3585:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3586:  py/conftest.py:314: AssertionError
    3587:  py/test/selenium/webdriver/common/form_handling_tests.py::test_toggling_acheckbox_should_return_its_current_state[remote] ERROR [ 58%]
    3588:  _ ERROR at setup of test_toggling_acheckbox_should_return_its_current_state[remote] _
    ...
    
    3600:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3601:  )
    3602:  def wait_for_server(url, timeout):
    3603:  start = time.time()
    3604:  while time.time() - start < timeout:
    3605:  try:
    3606:  urlopen(url)
    3607:  return 1
    3608:  except OSError:
    3609:  time.sleep(0.2)
    3610:  return 0
    3611:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3612:  url = f"http://{_host}:{_port}/status"
    3613:  try:
    3614:  >           _socket.connect((_host, _port))
    3615:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3616:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3629:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3630:  )
    3631:  def wait_for_server(url, timeout):
    3632:  start = time.time()
    3633:  while time.time() - start < timeout:
    3634:  try:
    3635:  urlopen(url)
    3636:  return 1
    3637:  except OSError:
    ...
    
    3658:  "--selenium-manager",
    3659:  "true",
    3660:  "--enable-managed-downloads",
    3661:  "true",
    3662:  ]
    3663:  )
    3664:  print(f"Selenium server running as process: {process.pid}")
    3665:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3666:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3667:  E           assert 0
    3668:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3669:  py/conftest.py:314: AssertionError
    3670:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_select_aradio_button[remote] ERROR [ 62%]
    3671:  ____ ERROR at setup of test_should_be_able_to_select_aradio_button[remote] _____
    ...
    
    3683:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3684:  )
    3685:  def wait_for_server(url, timeout):
    3686:  start = time.time()
    3687:  while time.time() - start < timeout:
    3688:  try:
    3689:  urlopen(url)
    3690:  return 1
    3691:  except OSError:
    3692:  time.sleep(0.2)
    3693:  return 0
    3694:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3695:  url = f"http://{_host}:{_port}/status"
    3696:  try:
    3697:  >           _socket.connect((_host, _port))
    3698:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3699:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3712:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3713:  )
    3714:  def wait_for_server(url, timeout):
    3715:  start = time.time()
    3716:  while time.time() - start < timeout:
    3717:  try:
    3718:  urlopen(url)
    3719:  return 1
    3720:  except OSError:
    ...
    
    3741:  "--selenium-manager",
    3742:  "true",
    3743:  "--enable-managed-downloads",
    3744:  "true",
    3745:  ]
    3746:  )
    3747:  print(f"Selenium server running as process: {process.pid}")
    3748:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3749:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3750:  E           assert 0
    3751:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3752:  py/conftest.py:314: AssertionError
    3753:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_select_aradio_button_by_clicking_on_it[remote] ERROR [ 66%]
    3754:  _ ERROR at setup of test_should_be_able_to_select_aradio_button_by_clicking_on_it[remote] _
    ...
    
    3766:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3767:  )
    3768:  def wait_for_server(url, timeout):
    3769:  start = time.time()
    3770:  while time.time() - start < timeout:
    3771:  try:
    3772:  urlopen(url)
    3773:  return 1
    3774:  except OSError:
    3775:  time.sleep(0.2)
    3776:  return 0
    3777:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3778:  url = f"http://{_host}:{_port}/status"
    3779:  try:
    3780:  >           _socket.connect((_host, _port))
    3781:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3782:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3795:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3796:  )
    3797:  def wait_for_server(url, timeout):
    3798:  start = time.time()
    3799:  while time.time() - start < timeout:
    3800:  try:
    3801:  urlopen(url)
    3802:  return 1
    3803:  except OSError:
    ...
    
    3824:  "--selenium-manager",
    3825:  "true",
    3826:  "--enable-managed-downloads",
    3827:  "true",
    3828:  ]
    3829:  )
    3830:  print(f"Selenium server running as process: {process.pid}")
    3831:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3832:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3833:  E           assert 0
    3834:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3835:  py/conftest.py:314: AssertionError
    3836:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_return_state_of_radio_buttons_before_interaction[remote] ERROR [ 70%]
    3837:  _ ERROR at setup of test_should_return_state_of_radio_buttons_before_interaction[remote] _
    ...
    
    3849:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3850:  )
    3851:  def wait_for_server(url, timeout):
    3852:  start = time.time()
    3853:  while time.time() - start < timeout:
    3854:  try:
    3855:  urlopen(url)
    3856:  return 1
    3857:  except OSError:
    3858:  time.sleep(0.2)
    3859:  return 0
    3860:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3861:  url = f"http://{_host}:{_port}/status"
    3862:  try:
    3863:  >           _socket.connect((_host, _port))
    3864:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3865:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3878:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3879:  )
    3880:  def wait_for_server(url, timeout):
    3881:  start = time.time()
    3882:  while time.time() - start < timeout:
    3883:  try:
    3884:  urlopen(url)
    3885:  return 1
    3886:  except OSError:
    ...
    
    3907:  "--selenium-manager",
    3908:  "true",
    3909:  "--enable-managed-downloads",
    3910:  "true",
    3911:  ]
    3912:  )
    3913:  print(f"Selenium server running as process: {process.pid}")
    3914:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3915:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3916:  E           assert 0
    3917:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    3918:  py/conftest.py:314: AssertionError
    3919:  py/test/selenium/webdriver/common/form_handling_tests.py::test_toggling_an_option_should_toggle_options_in_amulti_select[remote] ERROR [ 75%]
    3920:  _ ERROR at setup of test_toggling_an_option_should_toggle_options_in_amulti_select[remote] _
    ...
    
    3932:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3933:  )
    3934:  def wait_for_server(url, timeout):
    3935:  start = time.time()
    3936:  while time.time() - start < timeout:
    3937:  try:
    3938:  urlopen(url)
    3939:  return 1
    3940:  except OSError:
    3941:  time.sleep(0.2)
    3942:  return 0
    3943:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3944:  url = f"http://{_host}:{_port}/status"
    3945:  try:
    3946:  >           _socket.connect((_host, _port))
    3947:  E           ConnectionRefusedError: [Errno 111] Connection refused
    3948:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    3961:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    3962:  )
    3963:  def wait_for_server(url, timeout):
    3964:  start = time.time()
    3965:  while time.time() - start < timeout:
    3966:  try:
    3967:  urlopen(url)
    3968:  return 1
    3969:  except OSError:
    ...
    
    3990:  "--selenium-manager",
    3991:  "true",
    3992:  "--enable-managed-downloads",
    3993:  "true",
    3994:  ]
    3995:  )
    3996:  print(f"Selenium server running as process: {process.pid}")
    3997:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    3998:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    3999:  E           assert 0
    4000:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4001:  py/conftest.py:314: AssertionError
    4002:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_throw_an_exception_when_selecting_an_unselectable_element[remote] ERROR [ 79%]
    4003:  _ ERROR at setup of test_should_throw_an_exception_when_selecting_an_unselectable_element[remote] _
    ...
    
    4015:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4016:  )
    4017:  def wait_for_server(url, timeout):
    4018:  start = time.time()
    4019:  while time.time() - start < timeout:
    4020:  try:
    4021:  urlopen(url)
    4022:  return 1
    4023:  except OSError:
    4024:  time.sleep(0.2)
    4025:  return 0
    4026:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4027:  url = f"http://{_host}:{_port}/status"
    4028:  try:
    4029:  >           _socket.connect((_host, _port))
    4030:  E           ConnectionRefusedError: [Errno 111] Connection refused
    4031:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    4044:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4045:  )
    4046:  def wait_for_server(url, timeout):
    4047:  start = time.time()
    4048:  while time.time() - start < timeout:
    4049:  try:
    4050:  urlopen(url)
    4051:  return 1
    4052:  except OSError:
    ...
    
    4073:  "--selenium-manager",
    4074:  "true",
    4075:  "--enable-managed-downloads",
    4076:  "true",
    4077:  ]
    4078:  )
    4079:  print(f"Selenium server running as process: {process.pid}")
    4080:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    4081:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4082:  E           assert 0
    4083:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4084:  py/conftest.py:314: AssertionError
    4085:  py/test/selenium/webdriver/common/form_handling_tests.py::test_sending_keyboard_events_should_append_text_in_inputs[remote] ERROR [ 83%]
    4086:  _ ERROR at setup of test_sending_keyboard_events_should_append_text_in_inputs[remote] _
    ...
    
    4098:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4099:  )
    4100:  def wait_for_server(url, timeout):
    4101:  start = time.time()
    4102:  while time.time() - start < timeout:
    4103:  try:
    4104:  urlopen(url)
    4105:  return 1
    4106:  except OSError:
    4107:  time.sleep(0.2)
    4108:  return 0
    4109:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4110:  url = f"http://{_host}:{_port}/status"
    4111:  try:
    4112:  >           _socket.connect((_host, _port))
    4113:  E           ConnectionRefusedError: [Errno 111] Connection refused
    4114:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    4127:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4128:  )
    4129:  def wait_for_server(url, timeout):
    4130:  start = time.time()
    4131:  while time.time() - start < timeout:
    4132:  try:
    4133:  urlopen(url)
    4134:  return 1
    4135:  except OSError:
    ...
    
    4156:  "--selenium-manager",
    4157:  "true",
    4158:  "--enable-managed-downloads",
    4159:  "true",
    4160:  ]
    4161:  )
    4162:  print(f"Selenium server running as process: {process.pid}")
    4163:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    4164:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4165:  E           assert 0
    4166:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4167:  py/conftest.py:314: AssertionError
    4168:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_clear_text_from_input_elements[remote] ERROR [ 87%]
    4169:  _ ERROR at setup of test_should_be_able_to_clear_text_from_input_elements[remote] _
    ...
    
    4181:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4182:  )
    4183:  def wait_for_server(url, timeout):
    4184:  start = time.time()
    4185:  while time.time() - start < timeout:
    4186:  try:
    4187:  urlopen(url)
    4188:  return 1
    4189:  except OSError:
    4190:  time.sleep(0.2)
    4191:  return 0
    4192:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4193:  url = f"http://{_host}:{_port}/status"
    4194:  try:
    4195:  >           _socket.connect((_host, _port))
    4196:  E           ConnectionRefusedError: [Errno 111] Connection refused
    4197:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    4210:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4211:  )
    4212:  def wait_for_server(url, timeout):
    4213:  start = time.time()
    4214:  while time.time() - start < timeout:
    4215:  try:
    4216:  urlopen(url)
    4217:  return 1
    4218:  except OSError:
    ...
    
    4239:  "--selenium-manager",
    4240:  "true",
    4241:  "--enable-managed-downloads",
    4242:  "true",
    4243:  ]
    4244:  )
    4245:  print(f"Selenium server running as process: {process.pid}")
    4246:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    4247:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4248:  E           assert 0
    4249:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4250:  py/conftest.py:314: AssertionError
    4251:  py/test/selenium/webdriver/common/form_handling_tests.py::test_empty_text_boxes_should_return_an_empty_string_not_null[remote] ERROR [ 91%]
    4252:  _ ERROR at setup of test_empty_text_boxes_should_return_an_empty_string_not_null[remote] _
    ...
    
    4264:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4265:  )
    4266:  def wait_for_server(url, timeout):
    4267:  start = time.time()
    4268:  while time.time() - start < timeout:
    4269:  try:
    4270:  urlopen(url)
    4271:  return 1
    4272:  except OSError:
    4273:  time.sleep(0.2)
    4274:  return 0
    4275:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4276:  url = f"http://{_host}:{_port}/status"
    4277:  try:
    4278:  >           _socket.connect((_host, _port))
    4279:  E           ConnectionRefusedError: [Errno 111] Connection refused
    4280:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    4293:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4294:  )
    4295:  def wait_for_server(url, timeout):
    4296:  start = time.time()
    4297:  while time.time() - start < timeout:
    4298:  try:
    4299:  urlopen(url)
    4300:  return 1
    4301:  except OSError:
    ...
    
    4322:  "--selenium-manager",
    4323:  "true",
    4324:  "--enable-managed-downloads",
    4325:  "true",
    4326:  ]
    4327:  )
    4328:  print(f"Selenium server running as process: {process.pid}")
    4329:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    4330:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4331:  E           assert 0
    4332:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4333:  py/conftest.py:314: AssertionError
    4334:  py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_clear_text_from_text_areas[remote] ERROR [ 95%]
    4335:  _ ERROR at setup of test_should_be_able_to_clear_text_from_text_areas[remote] __
    ...
    
    4347:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4348:  )
    4349:  def wait_for_server(url, timeout):
    4350:  start = time.time()
    4351:  while time.time() - start < timeout:
    4352:  try:
    4353:  urlopen(url)
    4354:  return 1
    4355:  except OSError:
    4356:  time.sleep(0.2)
    4357:  return 0
    4358:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4359:  url = f"http://{_host}:{_port}/status"
    4360:  try:
    4361:  >           _socket.connect((_host, _port))
    4362:  E           ConnectionRefusedError: [Errno 111] Connection refused
    4363:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    4376:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4377:  )
    4378:  def wait_for_server(url, timeout):
    4379:  start = time.time()
    4380:  while time.time() - start < timeout:
    4381:  try:
    4382:  urlopen(url)
    4383:  return 1
    4384:  except OSError:
    ...
    
    4405:  "--selenium-manager",
    4406:  "true",
    4407:  "--enable-managed-downloads",
    4408:  "true",
    4409:  ]
    4410:  )
    4411:  print(f"Selenium server running as process: {process.pid}")
    4412:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    4413:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4414:  E           assert 0
    4415:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4416:  py/conftest.py:314: AssertionError
    4417:  py/test/selenium/webdriver/common/form_handling_tests.py::test_radio_should_not_be_selected_after_selecting_sibling[remote] ERROR [100%]
    4418:  _ ERROR at setup of test_radio_should_not_be_selected_after_selecting_sibling[remote] _
    ...
    
    4430:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4431:  )
    4432:  def wait_for_server(url, timeout):
    4433:  start = time.time()
    4434:  while time.time() - start < timeout:
    4435:  try:
    4436:  urlopen(url)
    4437:  return 1
    4438:  except OSError:
    4439:  time.sleep(0.2)
    4440:  return 0
    4441:  _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4442:  url = f"http://{_host}:{_port}/status"
    4443:  try:
    4444:  >           _socket.connect((_host, _port))
    4445:  E           ConnectionRefusedError: [Errno 111] Connection refused
    4446:  py/conftest.py:292: ConnectionRefusedError
    ...
    
    4459:  "java/src/org/openqa/selenium/grid/selenium_server_deploy.jar",
    4460:  )
    4461:  def wait_for_server(url, timeout):
    4462:  start = time.time()
    4463:  while time.time() - start < timeout:
    4464:  try:
    4465:  urlopen(url)
    4466:  return 1
    4467:  except OSError:
    ...
    
    4488:  "--selenium-manager",
    4489:  "true",
    4490:  "--enable-managed-downloads",
    4491:  "true",
    4492:  ]
    4493:  )
    4494:  print(f"Selenium server running as process: {process.pid}")
    4495:  >           assert wait_for_server(url, 10), f"Timed out waiting for Selenium server at {url}"
    4496:  E           AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4497:  E           assert 0
    4498:  E            +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4499:  py/conftest.py:314: AssertionError
    4500:  =========================== short test summary info ============================
    4501:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_click_on_submit_input_elements[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4502:  assert 0
    4503:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4504:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_clicking_on_unclickable_elements_does_nothing[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4505:  assert 0
    4506:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4507:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_click_image_buttons[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4508:  assert 0
    4509:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4510:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_input_in_form[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4511:  assert 0
    4512:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4513:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_any_input_element_within_form[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4514:  assert 0
    4515:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4516:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_any_element_within_form[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4517:  assert 0
    4518:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4519:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_element_with_id_submit[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4520:  assert 0
    4521:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4522:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_submit_element_with_name_submit[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4523:  assert 0
    4524:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4525:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_not_submit_button_outside_form[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4526:  assert 0
    4527:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4528:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_enter_text_into_atext_area_by_setting_its_value[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4529:  assert 0
    4530:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4531:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_enter_data_into_form_fields[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4532:  assert 0
    4533:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4534:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_select_acheck_box[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4535:  assert 0
    4536:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4537:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_toggle_the_checked_state_of_acheckbox[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4538:  assert 0
    4539:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4540:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_toggling_acheckbox_should_return_its_current_state[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4541:  assert 0
    4542:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4543:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_select_aradio_button[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4544:  assert 0
    4545:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4546:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_select_aradio_button_by_clicking_on_it[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4547:  assert 0
    4548:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4549:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_return_state_of_radio_buttons_before_interaction[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4550:  assert 0
    4551:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4552:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_toggling_an_option_should_toggle_options_in_amulti_select[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4553:  assert 0
    4554:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4555:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_throw_an_exception_when_selecting_an_unselectable_element[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4556:  assert 0
    4557:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4558:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_sending_keyboard_events_should_append_text_in_inputs[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4559:  assert 0
    4560:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4561:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_clear_text_from_input_elements[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4562:  assert 0
    4563:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4564:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_empty_text_boxes_should_return_an_empty_string_not_null[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4565:  assert 0
    4566:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4567:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_should_be_able_to_clear_text_from_text_areas[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4568:  assert 0
    4569:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4570:  ERROR py/test/selenium/webdriver/common/form_handling_tests.py::test_radio_should_not_be_selected_after_selecting_sibling[remote] - AssertionError: Timed out waiting for Selenium server at http://localhost:4444/status
    4571:  assert 0
    4572:  +  where 0 = <function server.<locals>.wait_for_server at 0x7f6293099940>('http://localhost:4444/status', 10)
    4573:  ============================= 24 errors in 10.35s ==============================
    ...
    
    4678:  platform linux -- Python 3.8.19, pytest-7.4.4, pluggy-1.3.0
    4679:  rootdir: /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/bin/py/test-remote-test/selenium/webdriver/common/window_tests.py.runfiles/_main/py
    4680:  configfile: pyproject.toml
    4681:  plugins: instafail-0.5.0, trio-0.8.0, mock-3.12.0
    4682:  collected 8 items
    4683:  py/test/selenium/webdriver/common/window_tests.py::test_should_get_the_size_of_the_current_window[remote] PASSED [ 12%]
    4684:  py/test/selenium/webdriver/common/window_tests.py::test_should_set_the_size_of_the_current_window[remote] PASSED [ 25%]
    4685:  py/test/selenium/webdriver/common/window_tests.py::test_should_get_the_position_of_the_current_window[remote] PASSED [ 37%]
    4686:  py/test/selenium/webdriver/common/window_tests.py::test_should_set_the_position_of_the_current_window[remote] FAILED [ 50%]
    4687:  __________ test_should_set_the_position_of_the_current_window[remote] __________
    4688:  driver = <selenium.webdriver.remote.webdriver.WebDriver (session="43148ad5-a496-4674-a145-18cd5f202916")>
    4689:  def test_should_set_the_position_of_the_current_window(driver):
    4690:  position = driver.get_window_position()
    4691:...

    @VietND96 VietND96 requested a review from joerg1985 December 19, 2024 03:06
    @VietND96 VietND96 force-pushed the grid-slot-matcher branch 3 times, most recently from 00449d7 to 7369c6a Compare December 19, 2024 18:59
    Copy link
    Member

    @joerg1985 joerg1985 left a comment

    Choose a reason for hiding this comment

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

    I have left some ideas for improvments, i hope this helps.

    @VietND96
    Copy link
    Member Author

    Thanks @joerg1985, can you check is it better now?

    @joerg1985
    Copy link
    Member

    joerg1985 commented Dec 23, 2024

    @VietND96 i think this comparator is not suitable for sorting the node slots.
    133.0a1 is dummy data so we might just ignore it...

    e.g.:

        List<String> a = new java.util.ArrayList<>(List.of("133", "133.0a1"));
        List<String> b = new java.util.ArrayList<>(List.of("133.0a1", "133"));
    
        a.sort(new org.openqa.selenium.grid.data.SemanticVersionComparator());
        b.sort(new org.openqa.selenium.grid.data.SemanticVersionComparator());
    
        assertThat(a).isEqualTo(b);
    

    Update: with valid input this returns good results, sorry for the confusion.

    Copy link

    codecov bot commented Dec 24, 2024

    Codecov Report

    All modified and coverable lines are covered by tests ✅

    Project coverage is 59.30%. Comparing base (57f8398) to head (b23cab9).
    Report is 1044 commits behind head on trunk.

    Additional details and impacted files
    @@            Coverage Diff             @@
    ##            trunk   #14914      +/-   ##
    ==========================================
    + Coverage   58.48%   59.30%   +0.82%     
    ==========================================
      Files          86       94       +8     
      Lines        5270     6040     +770     
      Branches      220      268      +48     
    ==========================================
    + Hits         3082     3582     +500     
    - Misses       1968     2190     +222     
    - Partials      220      268      +48     

    ☔ View full report in Codecov by Sentry.
    📢 Have feedback on the report? Share it here.

    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.

    Signed-off-by: Viet Nguyen Duc <[email protected]>
    @diemol diemol merged commit dc952cd into trunk Dec 26, 2024
    33 checks passed
    @diemol diemol deleted the grid-slot-matcher branch December 26, 2024 15:15
    sandeepsuryaprasad pushed a commit to sandeepsuryaprasad/selenium that referenced this pull request Dec 27, 2024
    …SeleniumHQ#14914)
    
    * [grid] Improve SlotMatcher and SlotSelector on request browserVersion
    
    Signed-off-by: Viet Nguyen Duc <[email protected]>
    
    * Fix tests
    
    Signed-off-by: Viet Nguyen Duc <[email protected]>
    
    ---------
    
    Signed-off-by: Viet Nguyen Duc <[email protected]>
    Co-authored-by: Diego Molina <[email protected]>
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    3 participants