作者:高元_G·Marshal于 2017年06月22日 发布在分类 / 开发技术 / Test / Selenium 下,并于 2017年06月22日 编辑
    Selenium WebDriver(5)——基础篇

       345

       0


    下面该学习如何控制 alert、confirm 和 弹出窗口这些了 

    【1、如何处理 confirm 和 alert】  
    处理 confirm、alert 其实很简单,只需要利用 WebDriver 的 switchTo().alert() 方法就可以轻松切换到 alert 对象 Alert,进行控制。 
    我们直接利用 高级增删改查 的Demo 测试 alert 和 confirm,顺便还使用 sendKeys 进行文字录入的操作 

    package lesson5;
    
    import static org.junit.Assert.*;
    
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.openqa.selenium.Alert;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedCondition;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class ExampleForAlert  {
     
        static WebDriver driver;
        
        @BeforeClass
        public static void init() {
        	System.out.println("init...");
        	// 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置
        	System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
        	// 创建一个 FireFox 的浏览器实例
        	driver = new FirefoxDriver();
        }
     
        @Test
        public void test() {
        	// 让浏览器访问 zTree Demo
        	driver.get("http://www.ztree.me/v3/demo/cn/exedit/edit_super.html");
        
        	// 等待 zTree 初始化完毕,Timeout 设置10秒
        	try {
        		(new WebDriverWait(driver, 10, 500)).until(new ExpectedCondition<Boolean>() {
        			public Boolean apply(WebDriver d) {
        				WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#treeDemo li').get(0);");
        				return element != null;
        			}
        		});
        
        	} catch(Exception e) {
        		e.printStackTrace();
        	}
        
        	((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');"
        			+ "window.zTreeNode = window.zTreeObj.getNodes()[0];"
        			+ "window.zTreeObj.selectNode(window.zTreeNode);");
        
        	//点击编辑按钮,弹出 confirm
        	WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_edit').get(0);");
        	element.click();
        
        	//第一次点击取消
        	Alert alert = driver.switchTo().alert();
        	System.out.println(alert.getText());
        	alert.dismiss();
        	element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_input').get(0);");
        	assertNull(element);
        
        	//点击编辑按钮,弹出 confirm
        	element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_edit').get(0);");
        	element.click();
        
        	//第二次点击确定
        	alert = driver.switchTo().alert();
        	alert.accept();
        	element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_input').get(0);");
        	assertNotNull(element);
        
        	//修改name
        	for (int i=0, j=element.getAttribute("value").length(); i<j; i++) {
        		element.sendKeys(Keys.BACK_SPACE);
        	}
        	element.sendKeys(Keys.RETURN);
        
        	//确定 提示信息
        	alert = driver.switchTo().alert();
        	alert.accept();
        
        	//修改name
        	element.sendKeys("test");
        	element.sendKeys(Keys.RETURN);
        	String newName = (String) ((JavascriptExecutor)driver).executeScript("return window.zTreeNode.name");
        	assertEquals(newName, "test");
        
        }
        
        @AfterClass
        public static void destory() {
        	System.out.println("destory...");
        	//关闭浏览器
        	driver.quit();
        }
    }
    
    

    【2、如何处理 弹出页面】 
    弹出窗口的捕获,同样需要利用 switchTo 方法,这里面需要注意的是——新弹出窗口后,还是要稍微等待一下;如果不等待一会儿,直接获取新窗口的 url 你会得到 about:blank 这样的结果 

    package lesson5;
    
    
    import java.util.Iterator;
    import java.util.Set;
    
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedCondition;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class ExampleForNewWindow  {
     
        static WebDriver driver;
        
        @BeforeClass
        public static void init() {
        	System.out.println("init...");
        	// 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置
        	System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
        	// 创建一个 FireFox 的浏览器实例
        	driver = new FirefoxDriver();
        }
     
        @Test
        public void test() {
        	// 让浏览器访问 zTree Demo
        	driver.get("http://www.ztree.me/v3/demo/cn/core/url.html");
        
        	// 等待 zTree 初始化完毕,Timeout 设置10秒
        	try {
        		(new WebDriverWait(driver, 10, 500)).until(new ExpectedCondition<Boolean>() {
        			public Boolean apply(WebDriver d) {
        				WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#treeDemo li').get(0);");
        				return element != null;
        			}
        		});
        
        	} catch(Exception e) {
        		e.printStackTrace();
        	}
        
        	((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');"
        			+ "window.zTreeNode = window.zTreeObj.getNodes()[0];");
        
        	//点击第一个节点,弹出 zTree 官网
        	WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('#' + window.zTreeNode.tId + '_a').get(0);");
        	element.click();
        
        	//等待5秒,确保新页面加载完毕
        	try {
        		(new WebDriverWait(driver, 5, 1000)).until(new ExpectedCondition<Boolean>() {
        			public Boolean apply(WebDriver d) {
        				return false;
        			}
        		});
        
        	} catch(Exception e) {}
    
        	//当前窗口的 Handle
        	String curWindow = driver.getWindowHandle();
        	//全部窗口的 Handle 集合
        	Set<String> wins = driver.getWindowHandles();
        	Iterator<String> itWin = wins.iterator();
        	while(itWin.hasNext()) {
        		String key = itWin.next();
        		if (curWindow.equals(key)) {
        			continue;
        		}
        		WebDriver newDriver = driver.switchTo().window(key);
        		System.out.println("new Window: " + newDriver.getCurrentUrl());
        	}
        
        }
        
        @AfterClass
        public static void destory() {
        	System.out.println("destory...");
        	//关闭浏览器
        	driver.quit();
        }
    }
     

    【3、另一种切换到 iframe 的方法】 

    今天主要接触了 switchTo 方法,使用这个方法,就可以直接切换到 iframe 窗口内,切换后使用js 时就可以把 iframe 当做当前的主窗口来使用了

    package lesson5;
    
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedCondition;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class ExampleForIframe2  {
     
        static WebDriver driver;
        
        @BeforeClass
        public static void init() {
        	System.out.println("init...");
        	// 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置
        	System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
        	// 创建一个 FireFox 的浏览器实例
        	driver = new FirefoxDriver();
        }
     
        @Test
        public void test() {
        	// 让浏览器访问 zTree Demo
        	driver.get("http://www.ztree.me/v3/demo.php#_102");
        
        	// 等待 iframe 加载完毕,Timeout 设置10秒
        	try {
        		(new WebDriverWait(driver, 10, 500)).until(new ExpectedCondition<Boolean>() {
        			public Boolean apply(WebDriver d) {
        				Boolean loaded = (Boolean) ((JavascriptExecutor)driver).executeScript("return !!demoIframe.$.fn.zTree.getZTreeObj('treeDemo');");
        				return loaded;
        			}
        		});
        
        	} catch(Exception e) {
        		e.printStackTrace();
        	}
        
        	driver.switchTo().frame("demoIframe");
        
        	((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');");
        
        	//利用 expandNode 方法展开第2个根节点
        	((JavascriptExecutor)driver).executeScript("window.zTreeNode = window.zTreeObj.getNodes()[1]; window.zTreeObj.expandNode(window.zTreeNode, true);");
        
        	// 等待 5 秒
        	try {
        		(new WebDriverWait(driver, 5, 1000)).until(new ExpectedCondition<Boolean>() {
        			public Boolean apply(WebDriver d) {
        				return false;
        			}
        		});
        
        	} catch(Exception e) {}
        
        }
        
        @AfterClass
        public static void destory() {
        	System.out.println("destory...");
        	//关闭浏览器
        	driver.quit();
        }
    }
    
    访问权限

    创建人 高元_G·Marshal
    文档编辑权限 创建者私有
    文档阅读权限 来自分类
    分类阅读权限 所有人
    分类编辑权限 所有人
    分类审核权限
    标签

    Selenium
    历史版本

    修改日期 修改人 备注
    2017-06-22 15:48:02[当前版本] 高元_G·Marshal CREAT
    同类知识
    相关知识

    睿恒知识库-V3.2.0