在Selenium中移回父框架

时间:2017-03-12 16:52:14

标签: selenium selenium-webdriver frame

要在Selenium中移回父框架, 使用driver.switchTo().parentFrame();。在我的示例网站中,我也使用driver.switchTo().defaultContent();实现了相同的功能。

这两者之间是否有任何功能差异:

- driver.switchTo().parentFrame();
- driver.switchTo().defaultContent();

在引用HTML文档中的帧时,是"父帧"和"默认内容"不同?请解释一下。

2 个答案:

答案 0 :(得分:1)

它确实有一定程度的差异。 假设你有一个页面有框架'三'在一个框架内'两个'在另一个框架内,考虑到你在框架中,三个'这是最内在的...

driver.switchTo().parentFrame(); - 这会将焦点转移到第二帧'。 driver.switchTo().defaultContent(); - 这会将焦点转移回主要(默认)内容,其中框架为“#”。所在。

我希望这很有帮助。谢谢!

答案 1 :(得分:0)

如果页面上只有两个框架,则没有功能差异。但是,我正在处理的应用程序在页面上有多达5个嵌套框架。

例如,我需要使用位于第三帧的两个元素,进入另一个帧内部,然后返回使用第3帧中的另一个元素。我有两个选择来完成此任务。

1:我可以一步一步走,然后回到

//click element 1
driver.SwitchTo().DefaultContent();
driver.SwitchTo().Frame(driver.FindElement(By.Id("Frame1")));
driver.SwitchTo().Frame(driver.FindElement(By.Id("Frame2")));
driver.FindElement(By.Id("element1")).Click();
//click element 2
driver.SwitchTo().DefaultContent();
driver.SwitchTo().Frame(driver.FindElement(By.Id("Frame1")));
driver.SwitchTo().Frame(driver.FindElement(By.Id("Frame3")));
driver.FindElement(By.Id("element2")).Click();

另一个选项是切换到父框架。

//click element 1
driver.SwitchTo().DefaultContent();
driver.SwitchTo().Frame(driver.FindElement(By.Id("Frame1")));
driver.SwitchTo().Frame(driver.FindElement(By.Id("Frame2")));
driver.FindElement(By.Id("element1")).Click();
//click element 2
driver.SwitchTo().ParentFrame();
driver.SwitchTo().Frame(driver.FindElement(By.Id("Frame3")));
driver.FindElement(By.Id("element2")).Click();

基本上,如果您只需要向后移动一个级别,它可以节省编写代码的工作量,以便一直切换回框架。