硒,如何选择新窗口(selenium, how can I select new window)

2019-07-30 03:01发布

我跑我在Eclipse中的硒RC测试使用TestNG。 我有试图打开一个新的浏览器页面的链接。 如何选择这个新页面在操作? 我用这个代码:

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. 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.

Answer 1:

窗口显然还没有名字,所以你不能按名称选择它。

  1. 如果窗口通过JavaScript打开,你可以改变剧本,尝试改变window.open("someUrl");window.open("someUrl", "someName"); ,你会然后能够通过集名称选择窗口。 关于更多信息MDN文档的window.open()

  2. 硒RC不支持<a href="someUrl" target="_blank">链接(这打开新窗口中的链接)。 因此,如果是这种类型的链接打开的窗口中,你必须找到这个<a>元素,得到href属性和调用

     selenium.openWindow(theFoundUrl, "theNewWindow"); selenium.selectWindow("id=theNewWindow"); 
  3. 如果之前或过程中通过JavaScript打开onload事件,你需要调用

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

    在bug更多这方面的信息SEL-339或openWindow()selectWindow()的JavaDoc。

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

    selenium.selectPopup()

    也就是说,显然,最简单的方法,因为它选择的第一个非顶级窗口。 因此,当你要选择最新的弹出它的唯一有用的。

  5. 如果新的窗口中有一个独特的标题,你可以做

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

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

  6. 否则,您必须遍历selenium.getAllWindowNames()以获得正确的域名(硒创建的窗口名称,而不一个)。 但是,你不能硬编码的名称到您的测试用例,因为它会改变每一次,所以你需要制定出一些动态逻辑这一点。

  7. 你会不喜欢这样的:去的webdriver。 它应该是迄今为止这类问题的能力更强。



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


Answer 3:

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

看看这个链接。 你可能会发现你的答案在这里 。

让我知道你有所帮助。



Answer 4:

尝试selenium.getAllWindowNames(),selenium.getAllWindowTitles()..其中一人将肯定工作。



文章来源: selenium, how can I select new window