1. iframe 的處理
查找元素必須在對應的 ifarme 中查找,否則是找不到的
1 // 傳入參數為 frame 的序號,從0開始 2 driver.switchTo().frame(Int index); 3 // 傳入參數為 frame 的 ID 或者 Name 屬性 4 driver.switchTo().frame(String nameOrId); 5 // 傳入參數為 frameElement 6 driver.switchTo().frame(WebElement frameElement); 7 // 切換回父級 8 driver.switchTo().defaultContent();
2. 彈出窗口的處理
1 // 只彈出一個窗口的情況 , 不需要傳入任何參數 , 直接切換到下一個窗口 2 // 得到當前窗口的句柄 3 String currentWindow = driver.getWindowHandle(); 4 // 得到所有窗口的句柄 5 Set<String> handles = driver.getWindowHandles(); 6 Iterator<String> it = handles.iterator(); 7 while (it.hasNext()) { 8 String handle = it.next(); 9 if (currentWindow.equals(handle)) 10 continue; 11 WebDriver window = driver.switchTo().window(handle); 12 log.info("title,url = " + window.getTitle() + "," + window.getCurrentUrl()); 13 }
1 // 切換到指定的窗口, 遍歷最多 10 次, 循環是為了提高穩定性, 個別瀏覽器下有的時候一次遍歷找不到 ( String windowTitle ) 2 for (int a = 0; a < =9; a++) { 3 Set<String> windowHandles = driver.getWindowHandles(); 4 for (String handler : windowHandles) { 5 driver.switchTo().window(handler); 6 String title = driver.getTitle(); 7 if (windowTitle.equals(title)) { 8 a = 10; 9 break; 10 } 11 } 12 }
3. 處理對話框 alert\confirm\prompt
driver.switchTo().alert()可以得到alert\confirm\prompt 對話框的對象,然后運用其方法對它進行操作。對話框操作的主要方法有:
- getText() 得到它的文本值
- accept() 相當於點擊它的"確認"
- dismiss() 相當於點擊"取消"或者叉掉對話框
- sendKeys() 輸入值,這個 alert\confirm 不能用,會報錯
4. 富文本編輯器
1 // 富文本編輯框的處理 2 driver.switchTo().frame("nameOrId"); // 定位到富文本輸入框所在的 frame 3 JavascriptExecutor js = (JavascriptExecutor) driver; 4 js.executeScript("document.body.innerHTML='ABCDEFG'"); // 通過 js 賦值進去