简体   繁体   中英

Unable to switch between two browser windows using Selenium WebDriver

I am new to WebDriver, i am facing an issue on browser window switching. I googled for my query resolution and the answer i found best is still not working for me.

Here is my code :

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.BeforeSuite;


public class FrameWorkBase {

public static WebDriver driver;
    public static WebDriverWait wait;
public static String firstWindow,secondWindow;
    @BeforeSuite
    public void startDriver() throws Exception{

driver= new FirefoxDriver(); // this firefox window is to open survey
        driver.manage().window().maximize();
        wait=new WebDriverWait(driver, 40);

        driver.get("http://www.cricinfo.com");
firstWindow=driver.getWindowHandle();

driver=new FirefoxDriver();
        driver.manage().window().maximize();

        driver.get("https://translate.google.co.in/");
secondWindow=driver.getWindowHandle();


        System.out.println("First window handle :" + firstWindow);
        System.out.println("\n Second window handle :" + secondWindow);

driver.switchTo().window(firstWindow);
System.out.println("hello");
}
}

I am getting an error on execution as Unable to find window 'xyz' where 'xyz' is the name of first window. Even i am printing the window name and it is displaying the same window for which it is displaying error.

Please suggest me what i am doing wrong here. Thanks

This is happening because you have reinitialized the driver instance.

driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://translate.google.co.in/");

This line has reinitialised your driver instance so what ever u try to do you won't find the window handle. If you are trying to work on both websites simultaneously, try to create another object of driver like WebDriver driver2 = new FirefoxDriver();

@Vivek has aptly answered your question. But, if you still want to open a link in a new window, you can try the below code for that:

Actions act = new Actions();
WebElement link = driver.findElement(By.xpath("//xpath of the link"));

//Opening the link in new window (works in FF and Chrome)
act.contextClick(link).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();

And you can switch in between them accordingly, with the use of handles. Furthermore, this link will help you handle two windows simultaneously .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM