Java selenium,如何选择新窗口

Java selenium,如何选择新窗口,java,selenium,selenium-rc,popupwindow,Java,Selenium,Selenium Rc,Popupwindow,我使用TestNG在Eclipse中运行selenium rc测试。我有一个链接,试图打开一个新的浏览器页面。如何选择此新页面进行操作?我使用以下代码: String[] wins = selenium.getAllWindowIds(); for (String s : wins) System.out.println("win: " + s); selenium.selectWindow(“name=NewPage”) 然而,它说网页没有找到。我还尝试使用以下代

我使用TestNG在Eclipse中运行selenium rc测试。我有一个链接,试图打开一个新的浏览器页面。如何选择此新页面进行操作?我使用以下代码:

String[] wins = selenium.getAllWindowIds();
    for (String s : wins)
         System.out.println("win: " + s); 
selenium.selectWindow(“name=NewPage”)

然而,它说网页没有找到。我还尝试使用以下代码定义页面ID或标题:

String[] wins = selenium.getAllWindowIds();
    for (String s : wins)
         System.out.println("win: " + s); 
它不定义新打开的窗口:

win: MainPage
win: 
如果使用
selenium.getAllWindowNames()
I get
win:selenium\u main\u app\u窗口
赢:Seleniu_blank65815


我编写这个代码
selenium.selectWindow(“name=blank99157”)但获取错误-
错误:窗口不存在。如果这看起来像一个Selenium bug,请确保阅读http://seleniumhq.org/docs/02_selenium_ide.html#alerts-弹出窗口和多个窗口用于潜在的解决方法。

您可能没有使用正确的窗口ID

查看此链接。你可能会找到你的答案


让我知道这有帮助。

试试selenium.getAllWindowNames(),selenium.getAllWindowTitles()…其中一个肯定会工作。

窗口显然没有名称,所以不能按名称选择

  • 如果窗口是通过JavaScript打开的,您可以更改脚本,请尝试更改
    window.open(“someUrl”)
    窗口。打开(“someUrl”、“someName”),然后您将能够根据设置的名称选择窗口。更多关于该网站的信息

  • Selenium RC在和JavaDocs中不支持

  • 如果您只有两个窗口/想要打开最新的窗口,您可以尝试

    这显然是最简单的方法,因为它选择了第一个非顶部窗口。因此,只有当您想要选择最新的弹出窗口时,它才有用

  • 如果新窗口具有唯一的标题,则可以执行以下操作:

    selenium.selectPopup("Title of the window");
    

  • 否则,必须迭代以获得正确的名称(Selenium为没有名称的窗口创建名称)。然而,您不能将该名称硬编码到您的测试用例中,因为它每次都会更改,所以您需要为此制定一些动态逻辑

  • 你不会喜欢这样的:选择WebDriver。它应该对这些问题有更大的抵抗力

  • WebDriver=newfirefoxdriver();
    WebElement inputhandler=driver.findelement(By.linktext(“此处的任何内容”);
    inputhHandler.click();
    字符串parentHandle=driver.getWindowHandle();
    设置PopHandle=driver.getWindowHandles();
    Iterator it=PopHandle.Iterator();
    字符串ChildHandle=“”;
    while(it.hasNext())
    {   
    if(it.next()!=parentHandle)
    {   
    ChildHandle=it.next().toString();
    //因为新窗口将是最后一个打开的窗口
    }
    }
    driver.switchTo()窗口(ChildHandle);
    WebDriverWait wait1=新的WebDriverWait(驱动程序,30);
    wait1.until(ExpectedConditions.visibilityOfElementLocated(By.id(“页面上的某物”));
    //在这里的页面上做你想做的任何事情
    driver.close();
    driver.switchTo().window(parentHandle);
    
    使用selenium。选择Window(主页)转到该页面,选择selenium。选择Window(null)返回到旧页面。如果不起作用,那么也试试这个selenium.openWindow(“URL”,“MyWindow”);selenium.selectWindow(“MyWindow”);我试试变体6。编写了这样的代码:String wins[]=selenium.getAllWindowNames();对于(字符串s:wins)System.out.println(“win:+s”);selenium.selectWindow(“name=wins[2]”);但获取错误:错误:窗口不存在。如果这看起来像一个Selenium bug,请确保阅读潜在的解决方法。@khris是的,异常中的链接是,文档中没有提到任何解决方法。但是,您可以尝试我在第2节和第3节的回答中提到的解决方法,这可能就是您看到的bug;selenium.selectWindow(“标题”);这是可行的,但这段代码又打开了一个窗口(第一个窗口是在我点击链接后打开的,第二个窗口是在这些代码之后,实际上我只需要关注第一个窗口,但selenium在我点击链接打开窗口后看不到窗口的标题,但看到的是我用url打开的窗口)。这可能没问题,但我有另一个类似的情况,当点击链接打开新窗口时,我需要选择一些记录,并在主窗口中自动选择。如果我只是以新链接的形式打开这样的弹出窗口,我会丢失所有先前插入的数据,而且-弹出窗口会打开,而主窗口会丢失数据(它可能会根据“在新选项卡中打开新窗口”的浏览器选项进行修改;我使用ie,并且选中了这样的选项,但新窗口仍会在与主窗口相同的选项卡中打开)
    selenium.selectPopup("Title of the window");
    
    WebDriver driver = new FirefoxDriver();
    WebElement inputhandler = driver.findelement(By.linktext("whatever here"));
    inputhandler.click();   
    String parentHandle = driver.getWindowHandle();
    Set<String> PopHandle = driver.getWindowHandles();
    Iterator<String> it = PopHandle.iterator();
    String ChildHandle = "";
    while(it.hasNext())
    {   
        if (it.next() != parentHandle)
        {   
            ChildHandle = it.next().toString();
            // because the new window will be the last one opened
        }
    }
    driver.switchTo().window(ChildHandle);
    WebDriverWait wait1 = new WebDriverWait(driver,30);
    wait1.until(ExpectedConditions.visibilityOfElementLocated(By.id("something on page")));
    
    // do whatever you want to do in the page here
    
    driver.close();
    driver.switchTo().window(parentHandle);