Java+selenium之WebDriver常见特殊情况如iframe/弹窗处理(四)
转自:https://www.cnblogs.com/andrew209/p/9017087.html
1. iframe 的处理
查找元素必须在对应的 ifarme 中查找,否则是找不到的
// 传入参数为 frame 的序号,从0开始 driver.switchTo().frame(Int index); // 传入参数为 frame 的 ID 或者 Name 属性 driver.switchTo().frame(String nameOrId); // 传入参数为 frameElement driver.switchTo().frame(WebElement frameElement); // 切换回父级 driver.switchTo().defaultContent();
2. 弹出窗口的处理
// 只弹出一个窗口的情况 , 不需要传入任何参数 , 直接切换到下一个窗口 // 得到当前窗口的句柄 String currentWindow = driver.getWindowHandle(); // 得到所有窗口的句柄 Set<String> handles = driver.getWindowHandles(); Iterator<String> it = handles.iterator(); while (it.hasNext()) { String handle = it.next(); if (currentWindow.equals(handle)) continue; WebDriver window = driver.switchTo().window(handle); log.info("title,url = " + window.getTitle() + "," + window.getCurrentUrl()); }
// 切换到指定的窗口, 遍历最多 10 次, 循环是为了提高稳定性, 个别浏览器下有的时候一次遍历找不到 ( String windowTitle ) for (int a = 0; a < =9; a++) { Set<String> windowHandles = driver.getWindowHandles(); for (String handler : windowHandles) { driver.switchTo().window(handler); String title = driver.getTitle(); if (windowTitle.equals(title)) { a = 10; break; } } }
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 赋值进去