如何切换到显示为弹出窗口的框架
本文关键字:窗口 框架 何切换 显示 | 更新日期: 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。因此,看起来框架已经在页面中了,只是在被触发之前才被隐藏。弹出窗口显示为一个单独的窗口(您可以在其中选择要将报告导出到的文件类型)。我无法访问新窗口中的元素,但我尝试在帧之间切换。