要在Selenium中移回父框架,
使用driver.switchTo().parentFrame();
。在我的示例网站中,我也使用driver.switchTo().defaultContent();
实现了相同的功能。
这两者之间是否有任何功能差异:
- driver.switchTo().parentFrame();
- driver.switchTo().defaultContent();
在引用HTML文档中的帧时,是"父帧"和"默认内容"不同?请解释一下。
答案 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();
基本上,如果您只需要向后移动一个级别,它可以节省编写代码的工作量,以便一直切换回框架。