无法使用Selenium WebDriver在两个浏览器窗口之间切换

时间:2014-12-22 10:52:10

标签: java selenium-webdriver

我是WebDriver的新手,我正面临着浏览器窗口切换的问题。 我用谷歌搜索我的查询解决方案,我发现最好的答案仍然不适合我。

这是我的代码:

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");
}
}

我收到执行错误,因为无法找到窗口' xyz'哪里' xyz'是第一个窗口的名称。 即使我正在打印窗口名称,它显示的是显示错误的窗口。

请告诉我这里我做错了什么。 感谢

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您已重新初始化了驱动程序实例。

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

此行重新初始化了您的驱动程序实例,因此无论您尝试做什么,都找不到窗口句柄。如果您尝试同时在两个网站上工作,请尝试创建另一个驱动程序对象,如WebDriver driver2 = new FirefoxDriver();

答案 1 :(得分:0)

@Vivek恰如其分地回答了你的问题。但是,如果您仍想在新窗口中打开链接,可以尝试以下代码:

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();

您可以使用句柄相应地切换它们。此外,this link will help you handle two windows simultaneously