BiDirectional API (W3C compliant) 
    
      
     
    Page being translated from English to Japanese. 
    Do you speak Japanese? Help us to translate
    it by sending us pull requests!
 
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 
    
	
    
   Page being translated from
   English to Japanese. Do you speak Japanese? Help us to translate
   it by sending us pull requests!
 
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 - BiDirectional API (W3C compliant) 
    
	
    
   Page being translated from
   English to Japanese. Do you speak Japanese? Help us to translate
   it by sending us pull requests!
 
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 );