Selenium框架切換-----Selenium快速入門(七)
阿新 • • 發佈:2018-03-23
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快速入門(七)