目錄
一、iframe
1、切換方式:
1、第一種情況:
2、第二種情況:
方式1:
先找到iframe,定位iframe元素(可以通過元素定位的各種方式:xpath,css等等),用對象接收,再去跳轉
方式2:通過frame序號——不推薦??
2、跳轉到父級iframe中
3、切換到默認iframe
總結:
二、切換Alert(提示框)
三、切換Window?句柄
四、鼠標操作
一、iframe
當想要定位iframe中的元素時,由于driver的焦點還停留在原頁面,我們在iframe新的頁面上定位元素時,自然會產生錯誤:【報錯:no such element: Unable to locate element】
所以我們需要將driver的焦點切換到iframe頁面中。
java中iframe的三個重載方法
1、切換方式:
1、第一種情況:
frame有具體的name 和 id 屬性(id和name的屬性值如果是動態變化的數字 就不能使用)
——直接通過id或name屬性切換iframe
driver.switchTo().frame("mainFrame");
2、第二種情況:
frame標簽本身沒有id 和 name 屬性 或者 其是動態
方式1:
先找到iframe,定位iframe元素(可以通過元素定位的各種方式:xpath,css等等),用對象接收,再去跳轉
WebElement mainFrame = driver.findElementByName("mainFrame");
driver.switchTo().frame("mainFrame");
方式2:通過frame序號——不推薦??
?# 根據需要填入index,這里定位HTML里的第一個
iframe = driver.find_elements_by_tag_name("iframe")[0] ?
driver.switch_to.frame(iframe)
2、跳轉到父級iframe中
如果是頂級iframe,不會有任何變化
driver.switchTo().parentFrame()
3、切換到默認iframe
一般就是最外層網頁。當有超過兩層以上的iframe嵌套,使用此方法可直接跳到最外層
driver.switchTo().defaultContent()
總結:
iframe往內層iframe進,只能一層層進,跳出去可以直接跳出最外面,iframe是一層一層往里面切
二、切換Alert(提示框)
- alert.getText()——獲取警告框中的提示信息
- alert.accept()——點擊確認按鈕
- alert.dismiss()——取消
alert 操作示例:
alert 頁面代碼:
<!DOCTYPE html><html><head><title>a.html</title></head><body><input type="text" name=""></body><script type="text/javascript">//confirm(確認到充值么)if(confirm("確認到充值么?")){alert("充值成功")}else{alert("取消充值")}</script>
</html>
alert操作代碼:
//得到alert框
Alert alert = driver.switchTo.alert();
//獲取內容
System.out.println(alert.getText());
//點擊取消
alert.dismiss();
//再次點擊確定 可以在alert原來操作的基礎上直接再次點擊
alert.accept();
三、切換Window?句柄
當我們點擊了 a 標簽元素時,會觸發打開鏈接頁面的事件,有兩種情形:
-
在當前窗口加載新頁面內容
-
新建一個窗口加載新頁面內容,這種情況在 a 標簽有 target="_blank" 時觸發
當發生第2種情況時,同iframe類似,我們需要切換窗口
切換方式:
傳入要操作窗口的handle句柄 --窗口的標識,唯一,并且是一串字符串來的
句柄(handle):selenium為每一個窗口分配的值,每一次都是不同的
切換方式:
driver.switchTo.window(nameOrHandle);
name一般沒人用,Handle句柄,如何獲取到窗口的句柄呢:
driver.getWindowHandle();獲取當前操作窗口的句柄,返回set集合,無序
driver.getWindowHandles();獲取測試時打開的所有窗口句柄
四、鼠標操作
自動化測試時,有些元素不適合直接點擊或者進行某些操作時,可以使用Selenium的Actions類(鼠標操作類)來模擬鼠標鍵盤操作,通過Actions對象可以發起鼠標左鍵、右鍵、移動鼠標等操作,最后使用perform方法執行操作。
clickAndHold() //在特定元素上單擊鼠標左鍵(不釋放)
release() //在特定元素上釋放鼠標左鍵
doubleClick() //在特定元素上雙擊鼠標左鍵
moveToElement() //移動鼠標指針到特定元素
contextClick() //在特定元素上右鍵單擊
dragAndDrop() //拖拽元素perform() //執行具體的操作,前面6個方法都是聲明一個操作,只有調用perform()后才會真正執行操作
Actions:? 在操作一個頁面元素的時候需要一連串的動作配合的時候,可以使用Actions來完成
//鼠標操作類
//創建對象
Actions action = new Actions(driver);
?
actions.clickAndHold(onElement).moveToElement(toElement).release().build().perform();
案例:ZTREE DEMO - drag & drop
拖拽一個元素到另一個元素的位置
? //按住一個元素,移動到另一個元素處,釋放
action.clickAndHold(treeDemo_2_span).moveToElement(treeDemo_11_span).release().perform();//拖拽 dragAndDrop(源,目標) 同上面效果一樣
action.dragAndDrop(treeDemo_2_span,treeDemo_11_span).perform();