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

我正在使用java与WebDriver.I必须在两个帧之间切换。 我已经在selenium IDE中logging了这个testing用例,并且我得到了这个值selectFrame relative = top select Frame = middle Frame

但有一个问题是无法识别相对= top和middleFrame。 我怎样才能解决这个问题在Selenium WebDriver与Java?

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

  • 一个号码。

    从其(从零开始)索引select一个帧。 也就是说,如果一个页面有三个帧,第一帧将在索引0 ,第二个在索引1 ,第三个在索引2 。 一旦框架被选中,WebDriver接口上的所有后续调用都将被设置为该框架。

  • 名称或ID。

    通过名称或IDselect一个框架。 通过匹配名称属性定位的框架总是优先于通过ID匹配的框架。

  • 以前find的WebElement

    使用之前定位的WebElementselect一个框架。

通过它的id /名称获取框架或通过driver.findElement()find它,你会很好。

切换到一个帧:

 driver.switchTo.frame("Frame_ID"); 

再次切换到默认值。

 driver.switchTo().defaultContent(); 

首先,您必须find框架ID并在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(); 

这个代码是常规的,所以很可能你需要做一些返工。 第一个参数是一个URL,第二个是限制尝试的计数器。

 public boolean selectWindow(window, maxTries) { def handles int tries = 0 while (true) { try { handles = driver.getWindowHandles().toArray() for (int a = handles.size() - 1; a >= 0 ; a--) { // Backwards is faster with FF since it requires two windows try { Log.logger.info("Attempting to select window: " + window) driver.switchTo().window(handles[a]); if (driver.getCurrentUrl().equals(window)) return true; else { Thread.sleep(2000) tries++ } if (tries > maxTries) { Log.logger.warn("Cannot select page") return false } } catch (Exception ex) { Thread.sleep(2000) tries++ } } } catch (Exception ex2) { Thread.sleep(2000) tries++ } } return false; } 

需要确定一次切换到一个框架,需要切换回默认内容访问另一个框架中的webelements。 由于Webdriver倾向于在当前框架内find新框架。

 driver.switchTo().defaultContent() 

你也可以使用:

 driver.switch_to.frame(0) 

(0)是html上的第一个iframe。

切换回默认内容:

 driver.switch_to.default_content() 

也可以使用WebDriverWait和ExpectedConditions(以确保Frame可用)。

  1. 以string作为参数

     (new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame-name")); 
  2. 以locator作为参数

     (new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame-id"))); 

更多信息可以在这里find