BiDirectional API (W3C compliant) The following list of APIs will be growing as the WebDriver BiDirectional Protocol grows
and browser vendors implement the same.
Additionally, Selenium will try to support real-world use cases that internally use a combination of W3C BiDi protocol APIs.
If there is additional functionality you’d like to see, please raise a
feature request .
1 - Browsing Context This section contains the APIs related to browsing context commands.
Open a new window Creates a new browsing context in a new window.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext browsingContext = new BrowsingContext ( driver , WindowType . WINDOW );
Open a new tab Creates a new browsing context in a new tab.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext browsingContext = new BrowsingContext ( driver , WindowType . TAB );
Use existing window handle Creates a browsing context for the existing tab/window to run commands.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
String id = driver . getWindowHandle ();
BrowsingContext browsingContext = new BrowsingContext ( driver , id );
Open a window with a reference browsing context A reference browsing context is a top-level browsing context .
The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext
browsingContext =
new BrowsingContext ( driver , WindowType . WINDOW , driver . getWindowHandle ());
Open a tab with a reference browsing context A reference browsing context is a top-level browsing context .
The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext
browsingContext =
new BrowsingContext ( driver , WindowType . TAB , driver . getWindowHandle ());
Navigate to a URL
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext browsingContext = new BrowsingContext ( driver , WindowType . TAB );
NavigationResult info = browsingContext . navigate ( "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html" );
Navigate to a URL with readiness state
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext browsingContext = new BrowsingContext ( driver , WindowType . TAB );
NavigationResult info = browsingContext . navigate ( "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html" ,
ReadinessState . COMPLETE );
Get browsing context tree Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
String referenceContextId = driver . getWindowHandle ();
BrowsingContext parentWindow = new BrowsingContext ( driver , referenceContextId );
parentWindow . navigate ( "https://www.selenium.dev/selenium/web/iframes.html" , ReadinessState . COMPLETE );
List < BrowsingContextInfo > contextInfoList = parentWindow . getTree ();
Get browsing context tree with depth Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
String referenceContextId = driver . getWindowHandle ();
BrowsingContext parentWindow = new BrowsingContext ( driver , referenceContextId );
parentWindow . navigate ( "https://www.selenium.dev/selenium/web/iframes.html" , ReadinessState . COMPLETE );
Get All Top level browsing contexts
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext window1 = new BrowsingContext ( driver , driver . getWindowHandle ());
BrowsingContext window2 = new BrowsingContext ( driver , WindowType . WINDOW );
List < BrowsingContextInfo > contextInfoList = window1 . getTopLevelContexts ();
Close a tab/window
Java
Ruby
JavaScript
Kotlin Selenium v4.8
BrowsingContext window1 = new BrowsingContext ( driver , WindowType . WINDOW );
BrowsingContext window2 = new BrowsingContext ( driver , WindowType . WINDOW );
window2 . close ();
2 - Log This section contains the APIs related to logging.
Listen to console.log
events Listen to the console.log
events and register callbacks to process the event.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
try ( LogInspector logInspector = new LogInspector ( driver )) {
CompletableFuture < ConsoleLogEntry > future = new CompletableFuture <>();
logInspector . onConsoleEntry ( future :: complete );
driver . get ( "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html" );
driver . findElement ( By . id ( "consoleLog" )). click ();
ConsoleLogEntry logEntry = future . get ( 5 , TimeUnit . SECONDS );
const inspector = await LogInspector ( driver )
await inspector . onConsoleEntry ( function ( log ) {
logEntry = log
})
await driver . get ( 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html' )
await driver . findElement ({ id : 'consoleLog' }). click ()
assert . equal ( logEntry . text , 'Hello, world!' )
assert . equal ( logEntry . realm , null )
assert . equal ( logEntry . type , 'console' )
assert . equal ( logEntry . level , 'info' )
assert . equal ( logEntry . method , 'log' )
assert . equal ( logEntry . stackTrace , null )
assert . equal ( logEntry . args . length , 1 )
Listen to JS Exceptions Listen to the JS Exceptions
and register callbacks to process the exception details.
Java
Ruby
JavaScript
Kotlin try ( LogInspector logInspector = new LogInspector ( driver )) {
CompletableFuture < JavascriptLogEntry > future = new CompletableFuture <>();
logInspector . onJavaScriptException ( future :: complete );
driver . get ( "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html" );
driver . findElement ( By . id ( "jsException" )). click ();
JavascriptLogEntry logEntry = future . get ( 5 , TimeUnit . SECONDS );
const inspector = await LogInspector ( driver )
await inspector . onJavascriptException ( function ( log ) {
logEntry = log
})
await driver . get ( 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html' )
await driver . findElement ({ id : 'jsException' }). click ()
assert . equal ( logEntry . text , 'Error: Not working' )
assert . equal ( logEntry . type , 'javascript' )
assert . equal ( logEntry . level , 'error' )
Listen to JS Logs Listen to all JS logs at all levels and register callbacks to process the log.
Java
Ruby
JavaScript
Kotlin Selenium v4.8
try ( LogInspector logInspector = new LogInspector ( driver )) {
CompletableFuture < JavascriptLogEntry > future = new CompletableFuture <>();
logInspector . onJavaScriptLog ( future :: complete );
driver . get ( "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html" );
driver . findElement ( By . id ( "jsException" )). click ();
JavascriptLogEntry logEntry = future . get ( 5 , TimeUnit . SECONDS );