硒,我该如何选择新窗口

时间:2012-06-27 06:54:38

标签: java selenium selenium-rc popupwindow

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

selenium.selectWindow("name=NewPage");

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

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

它没有定义我新打开的窗口:

win: MainPage
win: 

如果使用selenium.getAllWindowNames(),我会获得win: selenium_main_app_window win: selenium_blank65815

我编写此代码selenium.selectWindow("name=blank99157");但收到错误 - ERROR: Window does not exist. If this looks like a Selenium bug, make sure to read http://seleniumhq.org/docs/02_selenium_ide.html#alerts-popups-and-multiple-windows for potential workarounds.

4 个答案:

答案 0 :(得分:7)

窗口显然没有名称,因此您无法按名称选择它。

  1. 如果通过JavaScript打开窗口并且您可以更改脚本,请尝试将window.open("someUrl");更改为window.open("someUrl", "someName");,然后您就可以按设置名称选择窗口。有关MDN doc for window.open()

  2. 的更多信息
  3. Selenium RC不支持<a href="someUrl" target="_blank">链接(在新窗口中打开链接)。因此,如果通过此类型的链接打开窗口,则必须找到此<a>元素,获取href属性并调用

    selenium.openWindow(theFoundUrl, "theNewWindow");
    selenium.selectWindow("id=theNewWindow");
    
  4. 如果在onload事件之前或期间通过JavaScript打开,则需要致电

    selenium.openWindow("", "theNewWindow");
    selenium.selectWindow("id=theNewWindow");
    

    错误SEL-339openWindow()selectWindow() JavaDocs中的更多相关信息。

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

    selenium.selectPopup()

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

  6. 如果新窗口具有唯一标题,则可以执行

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

    selenium.selectWindow("title=Title of the window");

  7. 否则,您必须遍历selenium.getAllWindowNames()才能获得正确的名称(Selenium为没有窗口的窗口创建名称)。但是,您无法将该名称硬编码到测试用例中,因为它每次都会更改,因此您需要为此计算出一些动态逻辑。

  8. 你不会喜欢这个:去WebDriver。它应该更能抵抗这些问题。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

查看此链接。您可能会找到答案here

让我知道这有帮助。

答案 3 :(得分:0)

尝试selenium.getAllWindowNames(),selenium.getAllWindowTitles()..其中一个肯定会有效。