首页 > 学院 > 开发设计 > 正文

和我一起学 Selenium WebDriver(5)——基础篇

2019-11-06 06:40:27
字体:
来源:转载
供稿:网友
前面的学习已经让我们可以轻松的运行js、点击节点,下面该学习如何控制 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(); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表