页面中有多个frame,如何切换到第二个frame进行操作

前言

这些是过去学习和工作中积累的个人总结,不过可能会存在一些主观臆断,如果有说错的地方,请指出来哦!

回答

什么是frame

是HTML的标签之一,其作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架),即用来实现在同一个浏览器窗口中同时显示多个页面的。frameset、frame 和 iframe 是三种不同的 frame 标签。

为什么要切换frame

如果在一个元素位于frameA的情况下,如果不切换到frameA,则定位元素时会提示该元素无法找到,从而导致脚本执行失败。

在Selenium框架中对于frame也有支持,主要提供了以下三个方法

  • webDriver.switchTo().frame(id/name/WebElement):切换到 frame
  • webDriver.switchTo().parentFrame():切换到父框架
  • webDriver.switchTo().defaultContent():切回到最外层
示例

如:现在页面上有两个frame1和frame2

  • 情况1:frame1和frame2无嵌套关系

切换到frame1:webDriver.switchTo().frame(“frame1”);

切回到父框架:webDriver.switchTo().parentFrame();

切换到frame2:webDriver.switchTo().frame(“frame2”);

  • 情况2:frame1和frame2有嵌套关系,frame2嵌套在frame1中

切换到frame1:webDriver.switchTo().frame(“frame1”);

切换到frame2:webDriver.switchTo().frame(“frame2”);

切回到父框架:webDriver.switchTo().parentFrame();

切回到最外层:webDriver.switchTo().defaultContent()

也可以使用

WebElement frameEle = driver.findElement(By.id(“frame1”));

driver.switchTo().frame(frameEle);

进行对于frame的切换。