Browsing Context

Commands

This section contains the APIs related to browsing context commands.

Open a new window

Creates a new browsing context in a new window.

Selenium v4.8

 Assertions.assertEquals(id, browsingContext.getId());  }   @Test

Selenium v4.8

 const browsingContext = await BrowsingContext(driver, {  type: 'window',  })

Open a new tab

Creates a new browsing context in a new tab.

Selenium v4.8

  @Test  void testNavigateToAUrl() {  BrowsingContext browsingContext = new BrowsingContext(driver, WindowType.TAB);

Selenium v4.8

 const browsingContext = await BrowsingContext(driver, {  type: 'tab',  })

Use existing window handle

Creates a browsing context for the existing tab/window to run commands.

Selenium v4.8

 wait = new WebDriverWait(driver, Duration.ofSeconds(10));  }   @Test  void testCreateABrowsingContextForGivenId() {

Selenium v4.8

 const id = await driver.getWindowHandle()  const browsingContext = await BrowsingContext(driver, {  browsingContextId: 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.

Selenium v4.8

 Assertions.assertNotNull(browsingContext.getId());  }   @Test  void testCreateATab() {  BrowsingContext browsingContext = new BrowsingContext(driver, WindowType.TAB);

Selenium v4.8

 const browsingContext = await BrowsingContext(driver, {  type: 'window',  referenceContext: await 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.

Selenium v4.8

  Assertions.assertNotNull(browsingContext.getId());  Assertions.assertNotNull(info.getNavigationId());  Assertions.assertTrue(info.getUrl().contains("/bidi/logEntryAdded.html"));  } 

Selenium v4.8

 const browsingContext = await BrowsingContext(driver, {  type: 'tab',  referenceContext: await driver.getWindowHandle(),  })

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);   Assertions.assertNotNull(browsingContext.getId());  Assertions.assertNotNull(info.getNavigationId());  Assertions.assertTrue(info.getUrl().contains("/bidi/logEntryAdded.html"));  }

Selenium v4.8

 let info = await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')

Selenium v4.8

 void testGetTreeWithAChild() {  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();   Assertions.assertEquals(1, contextInfoList.size());  BrowsingContextInfo info = contextInfoList.get(0);

Selenium v4.8

 const info = await browsingContext.navigate(  'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html',  'complete'  )

Get browsing context tree

Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.

Selenium v4.8

 Assertions.assertTrue(info.getChildren().get(0).getUrl().contains("formPage.html"));  }   @Test  void testGetTreeWithDepth() {  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(0);   Assertions.assertEquals(1, contextInfoList.size());  BrowsingContextInfo info = contextInfoList.get(0);

Selenium v4.8

 const browsingContextId = await driver.getWindowHandle()  const parentWindow = await BrowsingContext(driver, {  browsingContextId: browsingContextId,  })  await parentWindow.navigate('https://www.selenium.dev/selenium/web/iframes.html', 'complete')   const contextInfo = await 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.

Selenium v4.8

 }   @Test  void testGetAllTopLevelContexts() {  BrowsingContext window1 = new BrowsingContext(driver, driver.getWindowHandle());  BrowsingContext window2 = new BrowsingContext(driver, WindowType.WINDOW);   List<BrowsingContextInfo> contextInfoList = window1.getTopLevelContexts();   Assertions.assertEquals(2, contextInfoList.size());  }   @Test

Selenium v4.8

 const browsingContextId = await driver.getWindowHandle()  const parentWindow = await BrowsingContext(driver, {  browsingContextId: browsingContextId,  })  await parentWindow.navigate('https://www.selenium.dev/selenium/web/iframes.html', 'complete')   const contextInfo = await parentWindow.getTree(0)

Get All Top level browsing contexts

Selenium v4.8

 BrowsingContext window2 = new BrowsingContext(driver, WindowType.WINDOW);   window2.close();   Assertions.assertThrows(BiDiException.class, window2::getTree);  }   @Test

Selenium v4.20.0

 const id = await driver.getWindowHandle()  const window1 = await BrowsingContext(driver, {  browsingContextId: id,  })  await BrowsingContext(driver, { type: 'window' })  const res = await window1.getTopLevelContexts()

Close a tab/window

Selenium v4.8

 BrowsingContext tab2 = new BrowsingContext(driver, WindowType.TAB);   tab2.close();   Assertions.assertThrows(BiDiException.class, tab2::getTree);  }   @Test  void testActivateABrowsingContext() {  BrowsingContext window1 = new BrowsingContext(driver, driver.getWindowHandle());  BrowsingContext window2 = new BrowsingContext(driver, WindowType.WINDOW);   window1.activate();   boolean isFocused = (boolean) ((JavascriptExecutor) driver).executeScript("return document.hasFocus();");   Assertions.assertTrue(isFocused);  }

Selenium v4.8

 const window1 = await BrowsingContext(driver, {type: 'window'})  const window2 = await BrowsingContext(driver, {type: 'window'})   await window2.close()

Activate a browsing context

Selenium v4.14.1

 BrowsingContext browsingContext = new BrowsingContext(driver, WindowType.TAB);   browsingContext.navigate("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html", ReadinessState.COMPLETE);   NavigationResult reloadInfo = browsingContext.reload(ReadinessState.INTERACTIVE);

Selenium v4.15

 const window1 = await BrowsingContext(driver, {  browsingContextId: id,  })
 await window1.activate()

Reload a browsing context

Selenium v4.13.0

 BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());   driver.get("https://www.selenium.dev/selenium/web/alerts.html");   driver.findElement(By.id("alert")).click();

Selenium v4.15

 await browsingContext.reload(undefined, 'complete')

Handle user prompt

Selenium v4.13.0

 @Test  void testDismissUserPromptWithText() {  BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());   driver.get("https://www.selenium.dev/selenium/web/alerts.html");   driver.findElement(By.id("prompt-with-default")).click();   String userText = "Selenium automates browsers";

Selenium v4.15

 await browsingContext.handleUserPrompt(true, userText)

Capture Screenshot

Selenium v4.13.0

  driver.get("https://www.selenium.dev/selenium/web/coordinates_tests/simple_page.html");   WebElement element = driver.findElement(By.id("box"));  Rectangle elementRectangle = element.getRect();

Selenium v4.15

 const response = await browsingContext.captureScreenshot()

Capture Viewport Screenshot

Selenium v4.14.0

 }   @Test  void textCaptureElementScreenshot() {  BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());   driver.get("https://www.selenium.dev/selenium/web/formPage.html");  WebElement element = driver.findElement(By.id("checky"));   String screenshot = browsingContext.captureElementScreenshot(((RemoteWebElement) element).getId());

Selenium v4.15

 const browsingContext = await BrowsingContext(driver, {  browsingContextId: id,  })   const response = await browsingContext.captureBoxScreenshot(5, 5, 10, 10)

Capture Element Screenshot

Selenium v4.14.0

 BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());  driver.get("https://www.selenium.dev/selenium/web/formPage.html");   browsingContext.setViewport(250, 300);   List<Long> newViewportSize =

Selenium v4.15

 const response = await browsingContext.captureElementScreenshot(elementId)

Set Viewport

Selenium v4.14.1

 BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());   driver.get("https://www.selenium.dev/selenium/web/formPage.html");  PrintOptions printOptions = new PrintOptions();

Selenium v4.15

 await browsingContext.setViewport(250, 300)

Selenium v4.14.1

 browsingContext.navigate("https://www.selenium.dev/selenium/web/formPage.html", ReadinessState.COMPLETE);   wait.until(visibilityOfElementLocated(By.id("imageButton"))).submit();  wait.until(titleIs("We Arrive Here"));   browsingContext.back();

Selenium v4.10

 const result = await browsingContext.printPage({  orientation: 'landscape',  scale: 1,  background: true,  width: 30,  height: 30,  top: 1,  bottom: 1,  left: 1,  right: 1,  shrinkToFit: true,  pageRanges: ['1-2'],  })

Selenium v4.16.0

  wait.until(visibilityOfElementLocated(By.id("imageButton"))).submit();  wait.until(titleIs("We Arrive Here"));   browsingContext.back();  Assertions.assertTrue(driver.getPageSource().contains("We Leave From Here")); 

Selenium v4.17

 await browsingContext.back()

Selenium v4.16.0

 void canTraverseBrowserHistory() {  BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());  browsingContext.navigate("https://www.selenium.dev/selenium/web/formPage.html", ReadinessState.COMPLETE);   wait.until(visibilityOfElementLocated(By.id("imageButton"))).submit();  wait.until(titleIs("We Arrive Here"));   browsingContext.traverseHistory(-1);  Assertions.assertTrue(driver.getPageSource().contains("We Leave From Here"));  } }

Selenium v4.17

 await browsingContext.forward()

Traverse history

Selenium v4.16.0

Selenium v4.17

 await browsingContext.traverseHistory(-1)

Events

This section contains the APIs related to browsing context events.

Browsing Context Created Event

Selenium v4.10

 try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {  CompletableFuture<BrowsingContextInfo> future = new CompletableFuture<>();   inspector.onBrowsingContextCreated(future::complete);   String windowHandle = driver.switchTo().newWindow(WindowType.WINDOW).getWindowHandle();   BrowsingContextInfo browsingContextInfo = future.get(5, TimeUnit.SECONDS);

Selenium v4.9.2

 const browsingContextInspector = await BrowsingContextInspector(driver)  await browsingContextInspector.onBrowsingContextCreated((entry) => {  contextInfo = entry  })   await driver.switchTo().newWindow('window')

Dom Content loaded Event

Selenium v4.10

 String windowHandle = driver.switchTo().newWindow(WindowType.TAB).getWindowHandle();   BrowsingContextInfo browsingContextInfo = future.get(5, TimeUnit.SECONDS);   Assertions.assertEquals(windowHandle, browsingContextInfo.getId());  }  }   @Test  void canListenToDomContentLoadedEvent()

Selenium v4.9.2

 const browsingContextInspector = await BrowsingContextInspector(driver)  let navigationInfo = null  await browsingContextInspector.onDomContentLoaded((entry) => {  navigationInfo = entry  })   const browsingContext = await BrowsingContext(driver, {  browsingContextId: await driver.getWindowHandle(),  })  await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html', 'complete')

Browsing Context Loaded Event

Selenium v4.10

 try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {  CompletableFuture<NavigationInfo> future = new CompletableFuture<>();  inspector.onBrowsingContextLoaded(future::complete);   BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());  context.navigate("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html", ReadinessState.COMPLETE);   NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);

Selenium v4.9.2

 const browsingContextInspector = await BrowsingContextInspector(driver)   await browsingContextInspector.onBrowsingContextLoaded((entry) => {  navigationInfo = entry  })  const browsingContext = await BrowsingContext(driver, {  browsingContextId: await driver.getWindowHandle(),  })  await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html', 'complete')

Selenium v4.15

 try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {  CompletableFuture<NavigationInfo> future = new CompletableFuture<>();  inspector.onNavigationStarted(future::complete);   BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());  context.navigate("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html", ReadinessState.COMPLETE);   NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);

Fragment Navigated Event

Selenium v4.15

 try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {  CompletableFuture<NavigationInfo> future = new CompletableFuture<>();   BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());  context.navigate("https://www.selenium.dev/selenium/web/linked_image.html", ReadinessState.COMPLETE);   inspector.onFragmentNavigated(future::complete);   context.navigate("https://www.selenium.dev/selenium/web/linked_image.html#linkToAnchorOnThisPage", ReadinessState.COMPLETE);   NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);

Selenium v4.15.0

 const browsingContextInspector = await BrowsingContextInspector(driver)   const browsingContext = await BrowsingContext(driver, {  browsingContextId: await driver.getWindowHandle(),  })  await browsingContext.navigate('https://www.selenium.dev/selenium/web/linked_image.html', 'complete')   await browsingContextInspector.onFragmentNavigated((entry) => {  navigationInfo = entry  })   await browsingContext.navigate('https://www.selenium.dev/selenium/web/linked_image.html#linkToAnchorOnThisPage', 'complete')

User Prompt Opened Event

Selenium v4.15

 try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {  CompletableFuture<NavigationInfo> future = new CompletableFuture<>();   BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());  context.navigate("https://www.selenium.dev/selenium/web/linked_image.html", ReadinessState.COMPLETE);   inspector.onFragmentNavigated(future::complete);   context.navigate("https://www.selenium.dev/selenium/web/linked_image.html#linkToAnchorOnThisPage", ReadinessState.COMPLETE);   NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);

User Prompt Closed Event

Selenium v4.15

 try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {  CompletableFuture<UserPromptClosed> future = new CompletableFuture<>();   BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());  inspector.onUserPromptClosed(future::complete);   driver.get("https://www.selenium.dev/selenium/web/alerts.html");   driver.findElement(By.id("prompt")).click();   context.handleUserPrompt(true, "selenium");   UserPromptClosed userPromptClosed = future.get(5, TimeUnit.SECONDS);  Assertions.assertEquals(context.getId(), userPromptClosed.getBrowsingContextId());

Browsing Context Destroyed Event

Selenium v4.18

 try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {  CompletableFuture<BrowsingContextInfo> future = new CompletableFuture<>();   inspector.onBrowsingContextDestroyed(future::complete);   String windowHandle = driver.switchTo().newWindow(WindowType.WINDOW).getWindowHandle();   driver.close();   BrowsingContextInfo browsingContextInfo = future.get(5, TimeUnit.SECONDS);   Assertions.assertEquals(windowHandle, browsingContextInfo.getId());

Selenium v4.18.0

 const browsingContextInspector = await BrowsingContextInspector(driver)  await browsingContextInspector.onBrowsingContextDestroyed((entry) => {  contextInfo = entry  })   await driver.switchTo().newWindow('window')   const windowHandle = await driver.getWindowHandle()  await driver.close()