我正在使用Selenium WebDriver(v2.2)“切换”到“顶部”框架,如下所示:
webdriver.SwitchTo().Frame("relative=top");
这会生成错误消息:
Unable to locate frame: relative=top
这可能是因为我正在使用的页面没有框架吗?
修改
不幸的是,涉及窗口切换的两种解决方案都失败了:
webdriver.SwitchTo().Window(winHandle);
webdriver.SwitchTo().DefaultContent();
严格地说,实际上,他们并没有失败。但是,这就是问题所在:假设我在一帧内获取一个IWebElement。这是代码大致的样子:
descend-into-the-frame
grab-the-element
ascend-out-of-the-frame-to-the-top
use-the-element
当我使用-the-element时,我得到一个“缓存中不存在元素”异常。这是因为从框架上升到顶部会切换窗口,从而清除缓存。真烦人不过我找到了一个解决方法:
ascend-out-of-the-frame-to-the-top
descend-into-the-frame
grab-the-element
use-the-element
这仍然意味着我必须注意元素不在缓存的情况。但至少只要我在获取元素后立即使用它,我就可以了。
感谢大家的帮助!
答案 0 :(得分:11)
要从其他框架切换顶部框架,您可以使用:
driver.switchTo().defaultContent();
答案 1 :(得分:3)
是。当帧存在时,你应该只有SwitchTo()。Frame()。
您可以通过以下方式解决这个问题:
try
{
webdriver.SwitchTo().Frame("relative=top");
}
catch (WebDriverException ex)
{
// do something, perhaps log that there is no frame
}
答案 2 :(得分:3)
我假设当您从一个帧切换到另一个帧时,Selenium IDE会为您提供该代码。我所做的是存储父窗口的窗口句柄,以便稍后切换回它。
String _whandle = driver.getWindowHandle();
...
driver.switchTo().window(whandle);
driver.switchTo().frame("frameA");
driver.findElement(By.id("buttonA")).click();
driver.switchTo().window(whandle);
driver.switchTo().frame("frameB");
driver.findElement(By.id("buttonB")).click();