1. 程式人生 > >【selenium3+JAVA】介面自動化測試教程(七)——frame切換方法

【selenium3+JAVA】介面自動化測試教程(七)——frame切換方法

在selenium的使用過程中,有時候會發現網站會有frame這種東西,如果某個元素在frame中,直接進行查詢是無法查詢到的,那麼這時候就需要先切換frame再進行元素查詢;

1.切換到頂層frame:

driver.switchTo().defaultContent();

2.通過frame編號切換到frame

通過該frame的編號來進行切換,從1開始,程式碼如下:

driver.switchTo().frame(n);

n為該frame的編號;

3.通過frame的id或者name切換

如果該frame有id或者name屬性,則可以直接用如下方法(frameId為該元素的id屬性值):

driver.switchTo().frame(frameIdOrName);

封裝方法如下:

/**切換frame
* @param frameId 為該frame的id屬性值或者name屬性值
*/
public static boolean switchFrame_Into(String frameId)
	{
		if(frameId.equals(""))
		{
			driver.switchTo().defaultContent();
			return true;
		}else
		{
			if(driver.findElement(By.id("\""+frameId+
"\"")) != null) { driver.switchTo().frame(frameId); return true; } LogUtil.error("進入iFrame:"+frameId+" 失敗"); return false; } }

4、直接定位到元素切換

通過元素直接切換

WebElement element = driver.findElement(By.id("a");
driver.switchTo().frame(element);

可以使用如下封裝方法

public static boolean switchToFrame
(By frame) { if(frame == null ) { driver.switchTo().defaultContent(); return true; }else { if(driver.findElement(frame)) { driver.switchTo().frame(findElement(frame)); return true; }else { return false; } } }

5.切換到父frame

使用方法:

driver.switchTo().parentFrame();

此方法可以切換到當前所在frame的父級frame;

6.多層frame切換

如果遇到多層frame的情況,如有三層frame:
frame A
------------frame B
-----------------------frame C
則如果想要進入C,則必須先進入frame A,再進入frame B,才能進入frame C;
如果呼叫driver.switchTo().defaultContent();則會直接跳轉回頂層frame,即最外層的body部分;