The following code demonstrates the SwitchTo() function. A popup window is opened from a main window and then control or focus is switched between these windows. This is particularly useful for when a test calls up a second window or popup and testing continues on the newly opened window. This code also demonstrates the use of an "Iterator".
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
/*-------------------------------------------------------------------------------
Handle tabs and pop up windows
* Note: Selenium will open each tab as a new window just like pop ups. So the same approach is used.
* 1) Get the window id
* 2) Switch to that window
* 3) You can now find elements etc
* This code also demonstrates using the Iterator functionality
-------------------------------------------------------------------------------*/
public class TabbedWindowOperations {
// Define browser variables here to allow it be public for all annotation to access it
WebDriver driver;
Set<String> windowids = null;
Iterator<String> iter =null;
String popupWindowid= null;
String mainWindowId=null;
String curWindow = null;
@BeforeTest
public void testSetup() {
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(6,TimeUnit.SECONDS);
}
@Test
public void popupHandling() throws InterruptedException {
System.out.println("Handling popup window");
driver.get("http://hdfc.com");
windowids = driver.getWindowHandles(); // returns an ID for every opened window
iter = windowids.iterator(); // iterate through open browser and print out their ids. One id only for now.
//String mainWindowId = iter.next();
mainWindowId = driver.getWindowHandle();
System.out.println("Main window handle: "+mainWindowId);
System.out.println("List Window IDs. There should be 1 id now");
System.out.println("================================");
while (iter.hasNext()){
//There should be just one item at this point;
System.out.println("Only one ID at this point: "+iter.next());
}
driver.findElement(By.xpath("//*[@id='acc-1-head-2']/a")).click(); // customer care link
driver.findElement(By.xpath("//*[@id='acc-1-section-2']/li[1]/a")).click(); //write to us link
//the above should open a new tab on current browser window BUT Selenium will open it as a new browser window
Thread.sleep(8000L);
windowids = null;
windowids = driver.getWindowHandles(); // returns an ID for every opened window
iter = windowids.iterator(); // iterate through open browser and print out their ids. One id only for now.
System.out.println("List Window IDs. There should be 2 id now");
System.out.println("=============================");
String[] winList = new String[2]; // create an array to store each window id. Need it for later use
int i=0;
while (iter.hasNext()){
winList[i]=iter.next();
i++;
}
//Print off the window handles. Its a long alphanumeric string
for (int x=0; x<2; x++){
System.out.println("Window Number: " + x + " handle = "+winList[x]);
}
// Now switch between the open window.
for (int yy=0; yy<3; yy++){ // do the switching this number of times
for(int y=0; y<2; y++){ // switch b/w windows 1 and 2
driver.switchTo().window(winList[y]).manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
if(y==0){
curWindow="Main Window";
} else {
curWindow="Popup Window";
}
System.out.println("Switching to " + curWindow + " window... Main window title: "+driver.getTitle());
Thread.sleep(8000L);
}
}
}
}
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
/*-------------------------------------------------------------------------------
Handle tabs and pop up windows
* Note: Selenium will open each tab as a new window just like pop ups. So the same approach is used.
* 1) Get the window id
* 2) Switch to that window
* 3) You can now find elements etc
* This code also demonstrates using the Iterator functionality
-------------------------------------------------------------------------------*/
public class TabbedWindowOperations {
// Define browser variables here to allow it be public for all annotation to access it
WebDriver driver;
Set<String> windowids = null;
Iterator<String> iter =null;
String popupWindowid= null;
String mainWindowId=null;
String curWindow = null;
@BeforeTest
public void testSetup() {
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(6,TimeUnit.SECONDS);
}
@Test
public void popupHandling() throws InterruptedException {
System.out.println("Handling popup window");
driver.get("http://hdfc.com");
windowids = driver.getWindowHandles(); // returns an ID for every opened window
iter = windowids.iterator(); // iterate through open browser and print out their ids. One id only for now.
//String mainWindowId = iter.next();
mainWindowId = driver.getWindowHandle();
System.out.println("Main window handle: "+mainWindowId);
System.out.println("List Window IDs. There should be 1 id now");
System.out.println("================================");
while (iter.hasNext()){
//There should be just one item at this point;
System.out.println("Only one ID at this point: "+iter.next());
}
driver.findElement(By.xpath("//*[@id='acc-1-head-2']/a")).click(); // customer care link
driver.findElement(By.xpath("//*[@id='acc-1-section-2']/li[1]/a")).click(); //write to us link
//the above should open a new tab on current browser window BUT Selenium will open it as a new browser window
Thread.sleep(8000L);
windowids = null;
windowids = driver.getWindowHandles(); // returns an ID for every opened window
iter = windowids.iterator(); // iterate through open browser and print out their ids. One id only for now.
System.out.println("List Window IDs. There should be 2 id now");
System.out.println("=============================");
String[] winList = new String[2]; // create an array to store each window id. Need it for later use
int i=0;
while (iter.hasNext()){
winList[i]=iter.next();
i++;
}
//Print off the window handles. Its a long alphanumeric string
for (int x=0; x<2; x++){
System.out.println("Window Number: " + x + " handle = "+winList[x]);
}
// Now switch between the open window.
for (int yy=0; yy<3; yy++){ // do the switching this number of times
for(int y=0; y<2; y++){ // switch b/w windows 1 and 2
driver.switchTo().window(winList[y]).manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
if(y==0){
curWindow="Main Window";
} else {
curWindow="Popup Window";
}
System.out.println("Switching to " + curWindow + " window... Main window title: "+driver.getTitle());
Thread.sleep(8000L);
}
}
}
}
No comments:
Post a Comment