如何使用Java在Selenium WebDriver中切换帧

Mal*_*lik 33 java selenium-webdriver

我正在使用Java与WebDriver.I必须在两帧之间切换.我已经在selenium IDE中记录了测试用例,并且我得到的值为selectFrame relative = top select Frame = middle Frame

但是有一个问题是它无法识别relative = top和middleFrame.如何使用Java在Selenium WebDriver中解决此问题?

Pet*_*ček 53

WebDriver的driver.switchTo().frame()方法采用三个可能的参数之一:

  • 一个号码.

    按其(从零开始)索引选择一个帧.也就是说,如果页面有三个帧,则第一帧将位于索引处0,第二帧位于索引处,1 第三帧位于索引处2.选择框架后,WebDriver界面上的所有后续调用都将进入该框架.

  • 名称或ID.

    按名称或ID选择框架.通过匹配名称属性定位的帧始终优先于ID匹配的帧.

  • 先前发现的一个WebElement.

    使用先前定位的WebElement选择框架.

通过它的ID /名称获取框架或找到它driver.findElement(),你会很好.

  • 即使这是旧的我会发布其他人,从我的经验来看它不会**计数`frameset`元素. (3认同)
  • @aurbano - 只是想让你知道3年后,你的评论解决了我遇到的问题!谢谢!!! (3认同)

小智 14

切换到一个框架:

driver.switchTo.frame("Frame_ID");
Run Code Online (Sandbox Code Playgroud)

再次切换到默认值.

driver.switchTo().defaultContent();
Run Code Online (Sandbox Code Playgroud)

  • 这很棘手。切换到默认内容是我所知道的 Seleniums API 中最糟糕的方法之一。因为如果您选择 driver.switchTo().defaultContent() 并再次发出 driver.switchTo().defaultContent() 则无法保证您最终会在哪里。Java Doc 声明:当页面包含 iframe 时,选择页面上的第一个框架或主文档。因此,如果您已经在根框架中,那么您最终会进入第一个框架,并带来所有混乱。所以总是测试你是否已经在根框架中(javascript -> return self.location === top.location;) (2认同)

小智 6

首先,您必须找到帧ID并在a中定义它 WebElement

例如: - WebElement fr = driver.findElementById("id");

然后使用以下代码切换到框架: - driver.switchTo().frame("Frame_ID");

示例脚本: -

WebElement fr = driver.findElementById("theIframe");

driver.switchTo().frame(fr);

Then to move out of frame use:- driver.switchTo().defaultContent();
Run Code Online (Sandbox Code Playgroud)