7

I run my selenium rc test in Eclipse with TestNG. I have a link which tries to open a new browser page. How can I select this new page to operate in? I use this code:

selenium.selectWindow("name=NewPage");

however it says page not found. I also try to define page ids or titles with this code:

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

It does not define my new opened window:

win: MainPage
win: 

If use selenium.getAllWindowNames() I get win: selenium_main_app_window win: selenium_blank65815.

I write this code selenium.selectWindow("name=blank99157"); but get the error - 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

4 回答 4

7

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

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

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

    selenium.openWindow(theFoundUrl, "theNewWindow");
    selenium.selectWindow("id=theNewWindow");
    
  3. 如果在活动之前或onload活动期间通过 JavaScript 打开它,您需要调用

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

    在错误SEL-339openWindow()selectWindow()JavaDocs 中了解更多信息。

  4. 如果你只有两个窗口/想打开最新的一个,你可以试试

    selenium.selectPopup()

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

  5. 如果新窗口有一个唯一的标题,你可以这样做

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

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

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

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

于 2012-06-27T13:15:47.483 回答
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);
于 2014-01-14T13:20:32.013 回答
0

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

看看这个链接。您可能会在这里找到答案。

让我知道这有帮助。

于 2012-06-27T08:02:07.720 回答
0

尝试 selenium.getAllWindowNames()、selenium.getAllWindowTitles().. 其中一个肯定会起作用。

于 2012-06-27T09:01:15.407 回答