java之web自动化,特殊元素定位(alert,iframe,多窗口)
特殊元素定位
1.模态框
模态框又叫模态对话框,是指在用户想要操作对话框以外的界面时,必须首先对该对话框进行响应,比如点击”确定“或者”取消“按钮,把这对话框关闭
①alert (警告框)
②confirm (确认框)
//点击警告框,模拟点击确定 driver.switchTo().alert().accept(); //模拟点击取消 driver.switchTo().alert().dismiss();
上面两种警告框不能通过常规的页面元素定位去操作
③通过div显示在页面最上层
div实现的确认框,通过常规的定位元素方法去定位
2.iframe内联框架
当要操作iframe中元素时,一定要注意先切换(driver)到此内联框架iframe中,
切换方式:
传入要操作的iframe的id或者name的值,或者此iframe WebElement:driver.switchTo().frame(name或者Id),还有driver.switchTo().frame(WebElement)
//iframe页面定位元素,这是通过id属性
driver.switchTo().frame("id");
3.多窗口window
package com.web_java01; import org.openqa.selenium.By; import org.testng.annotations.Test; import java.util.Set; public class web_test05 extends Base { /* 1.打开A页面,在A页面中输入操作 2.点击A页面的超链接,打开B页面 3.点击A页面的超链接,打开C页面 4.往B和C页面中输入操作 */ @Test public void test() throws InterruptedException { //访问百度 driver.get("http://www.baidu.com"); //等待 Thread.sleep(2000); //拿到A页面的句柄 String handleA = driver.getWindowHandle(); //打开超链接B driver.findElement(By.linkText("新闻")).click(); Thread.sleep(1000); //打开超链接C driver.findElement(By.linkText("地图")).click(); Thread.sleep(1000); //拿到所有页面的句柄 Set<String> handles= driver.getWindowHandles(); for (String handle : handles) { if(handle.equals(handleA)){ continue; } driver.switchTo().window(handle); String windowTitle = driver.getTitle(); if(windowTitle.contains("新闻")){ driver.findElement(By.id("ww")).sendKeys("新闻页面"); }else if (windowTitle.contains("地图")){ driver.findElement(By.id("sole-input")).sendKeys("地图"); Thread.sleep(3000); } } Thread.sleep(4000); //关闭浏览器 driver.quit(); } }