1. 程式人生 > >Selenium框架切換-----Selenium快速入門(七)

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

type eset 9.png 說了 int 否則 work .html 切換

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

  切換框架:是指切換html中的iframe標簽元素或者frame標簽元素,註意,並不包括frameset

  以下是常用的方法:

方法 說明
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,代碼如下

  frame.html 

<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後,我們的項目結構是這樣的

  技術分享圖片

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

  需要註意的時,每次切換完,下次切換到其他框架時,都需要先切換到最頂端的主文檔,即先調用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時,框架不一定加載成功,這個要引起我們的註意,實際上,這種情況經常出現,後面將會講到如何避免這種情況的發生。

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

  技術分享圖片

  

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