Selenium框架切換-----Selenium快速入門(七)

  上一篇說了窗口的切換,本篇說說框架的切換。html

  切換框架:是指切換html中的iframe標籤元素或者frame標籤元素,注意,並不包括framesetjava

  如下是經常使用的方法:git

方法 說明
WebDriver switchTo().frame(int index) 經過索引切換到指定的框架,若框架不存在,則拋出異常 NoSuchFrameException
WebDriver switchTo().frame(String nameOrId) 經過框架的name或者id切換到指定的框架,若框架不存在,則拋出異常 NoSuchFrameException
WebDriver switchTo().frame(WebElement frameElement) 經過元素定位切換到該框架。若元素不穩定,則拋出StaleElementReferenceException,若框架不存在,則拋出NoSuchFrameException
WebDriver switchTo().parentFrame() 切換到父級框架,若是當前框架是最頂級,則不會切換。
WebDriver switchTo().defaultContent() 返回到最頂級的主文檔,官方還說了一種可能,就是返回第一個框架,但我暫時未找到這個例子。

  咱們在html目錄中增長四個html,分別爲frame.html,frame1.html,frame2.html,frameset.html,代碼以下github

  frame.html api

<html>
<head> 
<meta > 
<title></title> 
</head> 
<body>
<div>
主頁文本框:<input type="text" id="text1" value="" />
</div>
<div>
<iframe src="frame1.html" id="frame1" name="frame1">
  <p>您的瀏覽器不支持  iframe 標籤。</p>
</iframe>
    </div>
    <div>
        <iframe src="frame2.html" id="frame2" name="frame2">
  <p>您的瀏覽器不支持  iframe 標籤。</p>
</iframe>
    </div>

</body>
</html>

  frame1.html瀏覽器

<!DOCTYPE html>
<html>
<head> 
<meta > 
<title></title> 
</head> 
<body>
<p>frame1文本框:<input id="text1" type="text" /></p>
</body>
</html>

  frame2.html框架

<!DOCTYPE html>
<html>
<head> 
<meta > 
<title></title> 
</head> 
<body>

<p>frame2文本框:<input id="text1" type="text" /></p>
</body>
</html>

  frameset.html測試

<!DOCTYPE html>
<html>
<head>
<meta>
<title>窗口切換</title>
</head>
<frameset rows="*,*" ,border="0" scrolling="no">
    <frame src="frame1.html" name="frame1" />
    <frame src="frame2.html" name="frame2" />
  
</frameset>

</html>

  以上的代碼都很簡單,都是常見的兩種框架,iframe和frameset,創建四個html後,咱們的項目結構是這樣的spa

  

 

  咱們先來測試下iframe,下面這段代碼的效果是,按次序切換到框架2,框架1,主框架,而且切換的時候,找到框架中的文本框,輸入文本3d

  須要注意的時,每次切換完,下次切換到其餘框架時,都須要先切換到最頂端的主文檔,即先調用switchTo().defaultContent(),不然會拋出異常。

       //獲得WebDriver
         WebDriver driver=DriverHelper.CreateChromeDriver();
         
         //爲什麼此處刷新該頁,由於發現第一次加載時,並不肯定能載入iframe的內容,刷新後,基本都能載入,後面將會講到Selenium的「等待」
         driver.get("D:\\WorkSpace\\SeleniumTest\\html\\frame.html");
         Thread.sleep(1000);
         driver.get("D:\\WorkSpace\\SeleniumTest\\html\\frame.html");
         Thread.sleep(1000);
         
         //切換到框架2,找到文本框,輸入「frame2」,首次運行,焦點默認在主文檔
         driver.switchTo().frame(1);
         WebElement textFrame2=driver.findElement(By.id("text1"));
         textFrame2.sendKeys("frame2");
         
         Thread.sleep(1000);
         
         //切換到框架1,找到文本框狂,輸入「frame1」
         //須要先切換到最頂端文檔,不然會拋出異常,找不到該框架
 driver.switchTo().defaultContent();
         driver.switchTo().frame(0);
         WebElement textFrame1=driver.findElement(By.id("text1"));
         textFrame1.sendKeys("frame1");
         
         Thread.sleep(1000);
         
         //切換回最頂端文檔,找到文本框,輸入「main」
         driver.switchTo().defaultContent();
         WebElement textMain=driver.findElement(By.id("text1"));
         textMain.sendKeys("main");

  對於frameset.html,操做大同小異,你們可自行嘗試,此處就不囉嗦。

    除了每次切換前,先調用switchTo().defaultContent()外,當第一次訪問frame.html時,框架不必定加載成功,這個要引發咱們的注意,實際上,這種狀況常常出現,後面將會講到如何避免這種狀況的發生。

  最後給出本次代碼執行的效果:

  

相關文章
相關標籤/搜索