2013-07-20 104 views

回答

0

您只能使用WebDriver在一幀內搜索。要與另一個框架中的元素進行交互,您需要「切換」它。然後司機會將其上下文轉換到該框架中,並且您可以在其中工作。

一小塊代碼

driver.switchTo().frame() methods

大功告成後,使用

driver.switchTo().defaultContent(); 

此外,more documentation切換回主窗口。

0

在Selenium中使用iFrames,我們有不同的方法來根據需要處理框架。請看下面處理幀的方法

driver.switchTo().frame(int arg0); 

通過其索引(從零開始)選擇一個幀。也就是說,如果頁面有多個幀(大於1),則第一幀將位於索引「0」,第二幀位於索引「1」,依此類推。

一旦框架被選中或導航,WebDriver接口上的所有後續調用都是針對該框架進行的。即駕駛員的重點將放在車架上。我們嘗試在頁面上執行的任何操作都不起作用,並在我們導航/切換到Frame時拋出元素。

參數索引 - (從零開始)索引 返回:驅動程序集中在給定幀(當前幀) 拋出:NoSuchFrameException - 如果未找到幀。例如:if iframe id = webklipper-publisher-widget-container-frame,它可以寫成driver.switchTo().frame(「webklipper-publisher-widget-container-frame」);以下是使用frame id與switchToFrame配合使用的代碼片段。

public void switchToFrame(int frame) { 
    try { 
     driver.switchTo().frame(frame); 
     System.out.println("Navigated to frame with id " + frame); 
    } catch (NoSuchFrameException e) { 
     System.out.println("Unable to locate frame with id " + frame 
       + e.getStackTrace()); 
    } catch (Exception e) { 
     System.out.println("Unable to navigate to frame with id " + frame 
       + e.getStackTrace()); 
    } 
}driver.switchTo().frame(String arg0); 

通過其名稱或ID選擇一個框架。通過匹配名稱屬性定位的框架總是優先於通過ID匹配的框架。 參數:name或Id - 框架的名稱或框架元素的ID。 返回:驅動程序集中在給定幀(當前幀) 拋出:NoSuchFrameException - 如果未找到幀

下面是使用幀名稱的示例代碼片段。
public void switchToFrame(String frame){ 嘗試driver.switchTo()。frame(frame); System.out.println(「導航到名稱框架」+框架); System.out.println(「無法找到帶有ID的幀」+幀 + e.getStackTrace()); System.out.println(「無法導航到帶有ID的幀」+幀 + e.getStackTrace()); } } driver.switchTo()。框架(WebElement frameElement);

使用之前定位的WebElement選擇一個框架。 參數:frameElement - 要切換到的框架元素。 返回:驅動程序關注給定幀(當前幀)。 拋出:NoSuchFrameException - 如果給定的元素既不是iframe也不是框架元素。和StaleElementReferenceException - 如果WebElement已過時。

下面是將元素髮送到和開關的示例代碼。

public void switchToFrame(WebElement frameElement) 
{ 
    try 
{ 
     if (isElementPresent(frameElement)) 

driver.switchTo().frame(frameElement);

  System.out.println("Navigated to frame with element "+ frameElement); 
     } else { 
      System.out.println("Unable to navigate to frame with element "+ frameElement); 
     } 
    } catch (NoSuchFrameException e) { 
     System.out.println("Unable to locate frame with element " + frameElement + e.getStackTrace()); 
    } catch (StaleElementReferenceException e) { 
     System.out.println("Element with " + frameElement + "is not attached to the page document" + e.getStackTrace()); 
    } catch (Exception e) { 
     System.out.println("Unable to navigate to frame with element " + frameElement + e.getStackTrace()); 
    } 
} 

當有多個幀(在A面框鏡架)有些時候,我們需要先切換到父框架,然後我們需要切換到子框架。下面是使用多個框架的代碼片段。

public void switchToFrame(String ParentFrame, String ChildFrame) { 
    try { 
     driver.switchTo().frame(ParentFrame).switchTo().frame(ChildFrame); 
     System.out.println("Navigated to innerframe with id " + ChildFrame 
       + "which is present on frame with id" + ParentFrame); 
    } catch (NoSuchFrameException e) { 
     System.out.println("Unable to locate frame with id " + ParentFrame 
       + " or " + ChildFrame + e.getStackTrace()); 
    } catch (Exception e) { 
     System.out.println("Unable to navigate to innerframe with id " 
       + ChildFrame + "which is present on frame with id" 
       + ParentFrame + e.getStackTrace()); 
    } 
} 

使用框架後,主要重要的是要回到網頁。如果我們不切換回默認頁面,驅動程序會拋出異常。以下是切換回默認內容的代碼片段。

public void switchtoDefaultFrame() { 
    try { 
     driver.switchTo().defaultContent(); 
     System.out.println("Navigated back to webpage from frame"); 
    } catch (Exception e) { 
     System.out 
       .println("unable to navigate back to main webpage from frame" 
         + e.getStackTrace()); 
    } 
} 
相關問題