六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 32|回复: 0

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

[复制链接]

升级  73.33%

46

主题

46

主题

46

主题

秀才

Rank: 2

积分
160
 楼主| 发表于 2013-2-3 10:31:04 | 显示全部楼层 |阅读模式
前面的学习已经让我们可以轻松的运行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 当做当前的主窗口来使用了
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表