如何切换到显示为弹出窗口的框架

本文关键字:窗口 框架 何切换 显示 | 更新日期: 2023-09-27 18:28:09

我正在使用以下应用程序:

  • 硒2.0在C中#
  • Firefox

我需要写一个测试,点击一个按钮,打开一个弹出窗口的框架。帧既没有名称也没有id。

框架中的源代码以"html"开头,而不是以"frame"开头。但是,当您右键单击窗口时,它会显示它是一个框架。所以,我认为它是一个框架,而不是一扇窗户。

我尝试了以下代码,但不起作用:

  • driver.SwitchTo().Frame(0)

我得到的错误如下所示:

错误:服务器对url http://localhost:7055/hub/session/126a4485-48cb-4230-b0b0-69c4169b1852/element/%7B706f4a88-56a7-4813-af1b-8e137ce676af%7D/click 没有响应

请帮忙。

谢谢。

如何切换到显示为弹出窗口的框架

试试这个语法可能不正确,但试试这个逻辑。

 WebElement MyFrame =  driver.FindElement(By.Id("frame"));
 driver.SwitchTo().Frame(MyFrame)

它在Java中对我很有用。

谢谢。

答案很简单。首先,iframe或框架不能"作为弹出窗口出现"。你可能的意思是,一个单独的弹出窗口用它自己的窗口句柄打开,并且它有自己的嵌入式iframe?如果是这样的话,只需使用driver.switchTo.window(handle),然后再调用driver.switchTo.frame(0)访问其框架。后面是driver.findElement(by)和其他需要执行的操作。

void switchToPopupWithClickAndClose() {
    driver.switchTo.window( handle );
    driver.switchTo.frame(0);
    driver.findElement(By.id("elId") ).click();
    if ( driver.getWindowHandles().size() > 1 ) {//popup still open
       driver.switchTo.defaultContent();
       driver.close();
       driver.switchTo().defaultContent();// switch to default content of 
                                      // original window
    }
}

这是一篇旧帖子,但对我来说仍然有效,因为我也没有弹出框。问题是,一旦弹出窗口出现,我会计算窗口的数量:

int windows = driver.WindowHandles.Count();

在弹出之前和之后,窗口的数量为1。

帧数:

int totalframes = driver.FindElements(By.TagName("iframe")).Count();

在弹出之前和之后为2。因此,看起来框架已经在页面中了,只是在被触发之前才被隐藏。弹出窗口显示为一个单独的窗口(您可以在其中选择要将报告导出到的文件类型)。我无法访问新窗口中的元素,但我尝试在帧之间切换。