Skip to content

Conversation

@titusfortner
Copy link
Member

@titusfortner titusfortner commented Jul 19, 2024

User description

This matches what is being done in other languages (#13991)

In general it isn't user friendly that that web_socket_url value to the driver is a boolean, but the response is a string. This provides a more obvious name for users to set the property.

This allows Options class to use #enable_bidi! and #bidi? as the booleans for the options.
Capabilities will return driver.capabilities[:web_socket_url] with either nil or the value of the url.

We ok with my use of bang and predicate here?


PR Type

Enhancement, Tests


Description

  • Added enable_bidi! method to Selenium::WebDriver::Options to set web_socket_url to true.
  • Added bidi? method to check if web_socket_url is enabled.
  • Added integration test for enabling bidi in Chrome options, verifying web_socket_url and bidi? method behavior.
  • Added unit test for enable_bidi! method, verifying setting and querying of bidi option.

Changes walkthrough 📝

Relevant files
Enhancement
options.rb
Add methods to enable and check bidi in options                   

rb/lib/selenium/webdriver/common/options.rb

  • Added enable_bidi! method to set web_socket_url to true.
  • Added bidi? method to check if web_socket_url is enabled.
  • +8/-0     
    Tests
    options_spec.rb
    Add integration test for enabling bidi in Chrome options 

    rb/spec/integration/selenium/webdriver/chrome/options_spec.rb

  • Added integration test for enabling bidi in Chrome options.
  • Verified web_socket_url and bidi? method behavior.
  • +18/-0   
    options_spec.rb
    Add unit test for enable_bidi! method in Chrome options   

    rb/spec/unit/selenium/webdriver/chrome/options_spec.rb

  • Added unit test for enable_bidi! method.
  • Verified setting and querying of bidi option.
  • +12/-0   

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

    @titusfortner titusfortner added the C-rb Ruby Bindings label Jul 19, 2024
    @titusfortner titusfortner requested a review from p0deje July 19, 2024 20:06
    @qodo-code-review
    Copy link
    Contributor

    PR Reviewer Guide 🔍

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🧪 PR contains tests
    🔒 No security concerns identified
    ⚡ Key issues to review

    Code Clarity
    The use of the bang (!) in enable_bidi! suggests that the method could raise an exception or has a dangerous side effect, which does not seem to be the case here. Consider renaming to enable_bidi if there are no such implications.

    Redundant Code
    The double negation in !!@options[:web_socket_url] is redundant. Ruby implicitly treats nil as false in boolean contexts, so @options[:web_socket_url] is sufficient.

    @qodo-code-review
    Copy link
    Contributor

    qodo-code-review bot commented Jul 19, 2024

    PR Code Suggestions ✨

    CategorySuggestion                                                                                                                                    Score
    Possible bug
    Update the enable_bidi! method to accept and set a URL instead of a boolean

    The method enable_bidi! sets @options[:web_socket_url] to true, which seems
    incorrect as it should likely store a WebSocket URL string instead of a boolean.
    Consider updating this method to accept a URL parameter or fetch it from a
    configuration.

    rb/lib/selenium/webdriver/common/options.rb [95]

    -def enable_bidi!
    -  @options[:web_socket_url] = true
    +def enable_bidi!(url)
    +  @options[:web_socket_url] = url
     end
     
    • Apply this suggestion
    Suggestion importance[1-10]: 9

    Why: This suggestion addresses a potential bug by ensuring that the enable_bidi! method sets a WebSocket URL instead of a boolean, which aligns with the expected behavior of handling a URL.

    9
    Enhancement
    Modify the bidi? method to correctly handle URL strings

    The bidi? method uses a double negation (!!) to convert the value to a boolean. This
    is unnecessary if @options[:web_socket_url] is always a boolean. If
    @options[:web_socket_url] is intended to be a URL string, adjust the method to check
    for nil or an empty string instead.

    rb/lib/selenium/webdriver/common/options.rb [99]

     def bidi?
    -  !!@options[:web_socket_url]
    +  !@options[:web_socket_url].nil? && !@options[:web_socket_url].empty?
     end
     
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This enhancement ensures that the bidi? method correctly checks for the presence of a WebSocket URL, improving the robustness of the code.

    8
    Possible issue
    Update the test to check for a valid WebSocket URL format

    The test case for enable_bidi! assumes web_socket_url to be a boolean, which
    contradicts the expected behavior of handling a URL. Update the test to check for a
    valid URL format instead of a boolean.

    rb/spec/integration/selenium/webdriver/chrome/options_spec.rb [56]

    -expect(options.web_socket_url).to be true
    +expect(options.web_socket_url).to match(/\Aws:\/\/.+/)
     
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This suggestion improves the test case by ensuring it checks for a valid WebSocket URL format, which aligns with the expected behavior of the enable_bidi! method.

    8
    Adjust the unit test to validate that web_socket_url is a properly formatted URL

    Similar to the integration test, the unit test for enable_bidi! should verify that
    web_socket_url is set to a valid URL, not just a boolean. Adjust the expectation to
    validate the format of the URL.

    rb/spec/unit/selenium/webdriver/chrome/options_spec.rb [152]

    -expect(options.web_socket_url).to be true
    +expect(options.web_socket_url).to match(/\Aws:\/\/.+/)
     
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: This suggestion enhances the unit test by verifying that web_socket_url is a valid URL, ensuring consistency with the expected behavior of the enable_bidi! method.

    8

    @qodo-code-review
    Copy link
    Contributor

    qodo-code-review bot commented Jul 19, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit ceaa988)

    Action: Ruby / Remote Tests (edge, windows) / Remote Tests (edge, windows)

    Failed stage: Run Bazel [❌]

    Failed test name: Selenium::WebDriver::Edge::Options enables bidi

    Failure summary:

    The action failed due to two specific test failures in the Selenium WebDriver integration tests for
    Edge:

  • The test Selenium::WebDriver::Edge::Options enables bidi failed because it attempted to load a
    non-existent file selenium/webdriver/chrome, which resulted in a LoadError. The correct file might
    be selenium/webdriver/chromium.
  • The test Selenium::WebDriver::Edge::Options enables BiDi on initialization also failed due to a
    LoadError when trying to initialize the WebDriver for Edge with certain options.

  • Relevant error logs:
    1:  ##[group]Operating System
    2:  Microsoft Windows Server 2022
    ...
    
    743:  �[32m[1,847 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/helpers.cc [for tool]; 5s local, disk-cache ... (4 actions running)
    744:  �[32m[1,848 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/file.cc [for tool]; 2s local, disk-cache ... (4 actions running)
    745:  �[32m[1,849 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/file.cc [for tool]; 4s local, disk-cache ... (4 actions, 3 running)
    746:  �[32m[1,852 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/enum.cc [for tool]; 1s local, disk-cache ... (4 actions running)
    747:  �[32m[1,865 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/enum.cc [for tool]; 2s local, disk-cache ... (4 actions, 3 running)
    748:  �[32m[1,892 / 3,107]�[0m Compiling src/google/protobuf/compiler/cpp/enum.cc [for tool]; 3s local, disk-cache ... (4 actions, 3 running)
    749:  �[32m[2,058 / 3,107]�[0m Compiling src/google/protobuf/compiler/command_line_interface.cc [for tool]; 4s local, disk-cache ... (3 actions, 1 running)
    750:  �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files):
    751:  java\src\org\openqa\selenium\remote\ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    752:  private final ErrorCodes errorCodes;
    753:  ^
    754:  java\src\org\openqa\selenium\remote\ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    755:  this.errorCodes = new ErrorCodes();
    756:  ^
    757:  java\src\org\openqa\selenium\remote\ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    758:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    759:  ^
    760:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    761:  ErrorCodes errorCodes = new ErrorCodes();
    762:  ^
    763:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    764:  ErrorCodes errorCodes = new ErrorCodes();
    765:  ^
    766:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    767:  response.setStatus(ErrorCodes.SUCCESS);
    768:  ^
    769:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    770:  response.setState(ErrorCodes.SUCCESS_STRING);
    771:  ^
    772:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    773:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    774:  ^
    775:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    776:  new ErrorCodes().getExceptionType((String) rawError);
    777:  ^
    778:  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
    779:  private final ErrorCodes errorCodes = new ErrorCodes();
    780:  ^
    781:  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
    782:  private final ErrorCodes errorCodes = new ErrorCodes();
    783:  ^
    784:  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
    785:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    786:  ^
    787:  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
    788:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    789:  ^
    790:  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
    791:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    792:  ^
    793:  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
    794:  response.setStatus(ErrorCodes.SUCCESS);
    795:  ^
    796:  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
    797:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    798:  ^
    799:  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
    800:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    801:  ^
    802:  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
    803:  private final ErrorCodes errorCodes = new ErrorCodes();
    804:  ^
    805:  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
    806:  private final ErrorCodes errorCodes = new ErrorCodes();
    807:  ^
    808:  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
    809:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    810:  ^
    811:  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
    812:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    813:  ^
    814:  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
    815:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    1014:  �[32m[3,119 / 3,132]�[0m 12 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 182s local, disk-cache ... (4 actions, 2 running)
    1015:  �[32m[3,119 / 3,132]�[0m 12 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 185s local, disk-cache ... (4 actions, 2 running)
    1016:  �[32m[3,119 / 3,132]�[0m 12 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 189s local, disk-cache ... (4 actions, 2 running)
    1017:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 190s local, disk-cache ... (4 actions, 1 running)
    1018:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 201s local, disk-cache ... (4 actions, 1 running)
    1019:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 204s local, disk-cache ... (4 actions, 1 running)
    1020:  �[32m[3,120 / 3,132]�[0m 13 / 31 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 219s local, disk-cache ... (4 actions, 2 running)
    1021:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver/edge:options-edge-remote (see D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test.log)
    1022:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver/edge:options-edge-remote (Summary)
    ...
    
    1033:  platform: windows
    1034:  ci: github
    1035:  rbe: false
    1036:  ruby: ruby 3.1.6p260 (2024-05-29 revision a777087be6) [x64-mingw-ucrt]
    1037:  Selenium::WebDriver::Edge::Options
    1038:  passes emulated device correctly
    1039:  passes emulated user agent correctly
    1040:  passes args correctly
    1041:  enables bidi (FAILED - 1)
    1042:  enables BiDi on initialization (FAILED - 2)
    1043:  Failures:
    1044:  1) Selenium::WebDriver::Edge::Options enables bidi
    1045:  Failure/Error: options = Selenium::WebDriver::Options.chrome
    1046:  LoadError:
    1047:  cannot load such file -- selenium/webdriver/chrome
    1048:  Did you mean?  selenium/webdriver/chromium
    1049:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `require'
    1050:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `chrome'
    1051:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:50:in `block (2 levels) in <module:Edge>'
    1052:  2) Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1053:  Failure/Error: driver = Selenium::WebDriver.for :edge, options: options
    1054:  LoadError:
    ...
    
    1059:  # ./rb/lib/selenium/webdriver/common/driver.rb:331:in `create_bridge'
    1060:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    1061:  # ./rb/lib/selenium/webdriver/edge/driver.rb:35:in `initialize'
    1062:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `new'
    1063:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `for'
    1064:  # ./rb/lib/selenium/webdriver.rb:89:in `for'
    1065:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:72:in `block (2 levels) in <module:Edge>'
    1066:  Finished in 24.51 seconds (files took 1.11 seconds to load)
    1067:  5 examples, 2 failures
    1068:  Failed examples:
    ...
    
    1078:  platform: windows
    1079:  ci: github
    1080:  rbe: false
    1081:  ruby: ruby 3.1.6p260 (2024-05-29 revision a777087be6) [x64-mingw-ucrt]
    1082:  Selenium::WebDriver::Edge::Options
    1083:  passes emulated device correctly
    1084:  passes emulated user agent correctly
    1085:  passes args correctly
    1086:  enables bidi (FAILED - 1)
    1087:  enables BiDi on initialization (FAILED - 2)
    1088:  Failures:
    1089:  1) Selenium::WebDriver::Edge::Options enables bidi
    1090:  Failure/Error: options = Selenium::WebDriver::Options.chrome
    1091:  LoadError:
    1092:  cannot load such file -- selenium/webdriver/chrome
    1093:  Did you mean?  selenium/webdriver/chromium
    1094:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `require'
    1095:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `chrome'
    1096:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:50:in `block (2 levels) in <module:Edge>'
    1097:  2) Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1098:  Failure/Error: driver = Selenium::WebDriver.for :edge, options: options
    1099:  LoadError:
    ...
    
    1104:  # ./rb/lib/selenium/webdriver/common/driver.rb:331:in `create_bridge'
    1105:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    1106:  # ./rb/lib/selenium/webdriver/edge/driver.rb:35:in `initialize'
    1107:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `new'
    1108:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `for'
    1109:  # ./rb/lib/selenium/webdriver.rb:89:in `for'
    1110:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:72:in `block (2 levels) in <module:Edge>'
    1111:  Finished in 21.49 seconds (files took 1.01 seconds to load)
    1112:  5 examples, 2 failures
    1113:  Failed examples:
    ...
    
    1123:  platform: windows
    1124:  ci: github
    1125:  rbe: false
    1126:  ruby: ruby 3.1.6p260 (2024-05-29 revision a777087be6) [x64-mingw-ucrt]
    1127:  Selenium::WebDriver::Edge::Options
    1128:  passes emulated device correctly
    1129:  passes emulated user agent correctly
    1130:  passes args correctly
    1131:  enables bidi (FAILED - 1)
    1132:  enables BiDi on initialization (FAILED - 2)
    1133:  Failures:
    1134:  1) Selenium::WebDriver::Edge::Options enables bidi
    1135:  Failure/Error: options = Selenium::WebDriver::Options.chrome
    1136:  LoadError:
    1137:  cannot load such file -- selenium/webdriver/chrome
    1138:  Did you mean?  selenium/webdriver/chromium
    1139:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `require'
    1140:  # ./rb/lib/selenium/webdriver/common/options.rb:33:in `chrome'
    1141:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:50:in `block (2 levels) in <module:Edge>'
    1142:  2) Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1143:  Failure/Error: driver = Selenium::WebDriver.for :edge, options: options
    1144:  LoadError:
    ...
    
    1149:  # ./rb/lib/selenium/webdriver/common/driver.rb:331:in `create_bridge'
    1150:  # ./rb/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
    1151:  # ./rb/lib/selenium/webdriver/edge/driver.rb:35:in `initialize'
    1152:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `new'
    1153:  # ./rb/lib/selenium/webdriver/common/driver.rb:55:in `for'
    1154:  # ./rb/lib/selenium/webdriver.rb:89:in `for'
    1155:  # ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:72:in `block (2 levels) in <module:Edge>'
    1156:  Finished in 21.76 seconds (files took 1.06 seconds to load)
    1157:  5 examples, 2 failures
    1158:  Failed examples:
    1159:  rspec ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:47 # Selenium::WebDriver::Edge::Options enables bidi
    1160:  rspec ./rb/spec/integration/selenium/webdriver/edge/options_spec.rb:65 # Selenium::WebDriver::Edge::Options enables BiDi on initialization
    1161:  ================================================================================
    1162:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 36s ... (4 actions, 1 running)
    1163:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 46s ... (4 actions, 1 running)
    1164:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 49s ... (4 actions, 1 running)
    1165:  �[32m[3,121 / 3,132]�[0m 14 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 33s ... (4 actions, 2 running)
    1166:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 35s ... (4 actions, 1 running)
    1167:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 46s ... (4 actions, 1 running)
    1168:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 47s ... (4 actions, 1 running)
    1169:  �[32m[3,122 / 3,132]�[0m 15 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 33s ... (4 actions, 2 running)
    1170:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 35s ... (4 actions, 1 running)
    1171:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 45s ... (4 actions, 1 running)
    1172:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 47s ... (4 actions, 1 running)
    1173:  �[32m[3,123 / 3,132]�[0m 16 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 38s ... (4 actions, 2 running)
    1174:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 39s ... (4 actions, 1 running)
    1175:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 49s ... (4 actions, 1 running)
    1176:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:manager-edge-remote; 52s ... (4 actions, 1 running)
    1177:  �[32m[3,124 / 3,132]�[0m 17 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 43s ... (4 actions, 2 running)
    1178:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 44s ... (4 actions, 1 running)
    1179:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 54s ... (4 actions, 1 running)
    1180:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 58s ... (4 actions, 1 running)
    1181:  �[32m[3,125 / 3,132]�[0m 18 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 38s ... (4 actions, 2 running)
    1182:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 39s ... (4 actions, 1 running)
    1183:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 50s ... (4 actions, 1 running)
    1184:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 54s ... (4 actions, 1 running)
    1185:  �[32m[3,126 / 3,132]�[0m 19 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 32s ... (4 actions, 2 running)
    1186:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 33s ... (4 actions, 1 running)
    1187:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 44s ... (4 actions, 1 running)
    1188:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 46s ... (4 actions, 1 running)
    1189:  �[32m[3,127 / 3,132]�[0m 20 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 37s ... (4 actions, 2 running)
    1190:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 39s ... (4 actions, 1 running)
    1191:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 49s ... (4 actions, 1 running)
    1192:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 52s ... (4 actions, 1 running)
    1193:  �[32m[3,128 / 3,132]�[0m 21 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 27s ... (4 actions, 2 running)
    1194:  �[32m[3,129 / 3,132]�[0m 22 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 29s ... (3 actions, 1 running)
    1195:  �[32m[3,129 / 3,132]�[0m 22 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 39s ... (3 actions, 1 running)
    1196:  �[32m[3,129 / 3,132]�[0m 22 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 18s ... (3 actions, 2 running)
    1197:  �[32m[3,130 / 3,132]�[0m 23 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 20s ... (2 actions, 1 running)
    1198:  �[32m[3,130 / 3,132]�[0m 23 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 30s ... (2 actions, 1 running)
    1199:  �[32m[3,130 / 3,132]�[0m 23 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 15s local, disk-cache ... (2 actions running)
    1200:  �[32m[3,131 / 3,132]�[0m 24 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 1s local, disk-cache
    1201:  �[32m[3,131 / 3,132]�[0m 24 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 11s local, disk-cache
    1202:  �[32m[3,131 / 3,132]�[0m 24 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 16s local, disk-cache
    1203:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 0s disk-cache
    1204:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote
    1205:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 1s local, disk-cache
    1206:  �[32m[3,132 / 3,133]�[0m 25 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 15s local, disk-cache
    1207:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote; 0s disk-cache
    1208:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote
    1209:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote; 1s local, disk-cache
    1210:  �[32m[3,133 / 3,134]�[0m 26 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote; 15s local, disk-cache
    1211:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 0s disk-cache
    1212:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote
    1213:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 1s local, disk-cache
    1214:  �[32m[3,134 / 3,135]�[0m 27 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 87s local, disk-cache
    1215:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 1s disk-cache
    1216:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote
    1217:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 1s local, disk-cache
    1218:  �[32m[3,135 / 3,136]�[0m 28 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 14s local, disk-cache
    1219:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 0s disk-cache
    1220:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote
    1221:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 1s local, disk-cache
    1222:  �[32m[3,136 / 3,137]�[0m 29 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 15s local, disk-cache
    1223:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 0s disk-cache
    1224:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote
    1225:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 1s local, disk-cache
    1226:  �[32m[3,137 / 3,138]�[0m 30 / 31 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 15s local, disk-cache
    1227:  �[32mINFO: �[0mFound 31 test targets...
    1228:  �[32mINFO: �[0mElapsed time: 1597.229s, Critical Path: 687.20s
    1229:  �[32mINFO: �[0m2877 processes: 1429 disk cache hit, 1172 internal, 276 local.
    1230:  �[32mINFO: �[0mBuild completed, 1 test FAILED, 2877 total actions
    1231:  //rb/spec/integration/selenium/webdriver:action_builder-edge-remote      �[0m�[32mPASSED�[0m in 29.1s
    1232:  //rb/spec/integration/selenium/webdriver:bidi-edge-remote                �[0m�[32mPASSED�[0m in 15.0s
    1233:  //rb/spec/integration/selenium/webdriver:devtools-edge-remote            �[0m�[32mPASSED�[0m in 87.9s
    1234:  //rb/spec/integration/selenium/webdriver:driver-edge-remote              �[0m�[32mPASSED�[0m in 34.3s
    1235:  //rb/spec/integration/selenium/webdriver:element-edge-remote             �[0m�[32mPASSED�[0m in 29.8s
    1236:  //rb/spec/integration/selenium/webdriver:error-edge-remote               �[0m�[32mPASSED�[0m in 14.6s
    ...
    
    1253:  //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote  �[0m�[32mPASSED�[0m in 15.5s
    1254:  //rb/spec/integration/selenium/webdriver/bidi:network-edge-remote        �[0m�[32mPASSED�[0m in 15.1s
    1255:  //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote         �[0m�[32mPASSED�[0m in 15.1s
    1256:  //rb/spec/integration/selenium/webdriver/edge:driver-edge-remote         �[0m�[32mPASSED�[0m in 34.2s
    1257:  //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote        �[0m�[32mPASSED�[0m in 15.3s
    1258:  //rb/spec/integration/selenium/webdriver/edge:service-edge-remote        �[0m�[32mPASSED�[0m in 22.2s
    1259:  //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote       �[0m�[32mPASSED�[0m in 31.3s
    1260:  //rb/spec/integration/selenium/webdriver/remote:element-edge-remote      �[0m�[32mPASSED�[0m in 17.2s
    1261:  //rb/spec/integration/selenium/webdriver/edge:options-edge-remote        �[0m�[31m�[1mFAILED�[0m in 3 out of 3 in 32.4s
    1262:  Stats over 3 runs: max = 32.4s, min = 29.3s, avg = 30.5s, dev = 1.4s
    1263:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test.log
    1264:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test_attempts/attempt_1.log
    1265:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/edge/options-edge-remote/test_attempts/attempt_2.log
    1266:  Executed 31 out of 31 tests: 30 tests pass and �[0m�[31m�[1m1 fails locally�[0m.
    1267:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
    1268:  �[0m
    1269:  ##[error]Process completed with exit code 1.
    

    ✨ CI feedback usage guide:

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

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

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

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

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

    Configuration options

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

    See more information about the checks tool in the docs.

    @titusfortner titusfortner merged commit c6e2c05 into trunk Dec 10, 2025
    31 checks passed
    @titusfortner titusfortner deleted the rb_enable_bidi branch December 10, 2025 21:36
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Labels

    C-rb Ruby Bindings P-enhancement PR with a new feature Review effort [1-5]: 2

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    6 participants