前面的学习已经让我们可以轻松的运行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();
}
}
分享到:
相关推荐
全书共分为四个部分:第1部分基础篇主要讲解自动化测试相关的基础理论、WebDriver 环境安装、单元测试工具的使用方法以及 WebDrvier的入门使用实例,第2部分实战应用篇基于丰富的实战案例讲解页面元素的定位方法以及...
selenium RC与selenium webdriver的区别
关于Selenium WebDriver工作原理的介绍,原理相关描述
selenium webdriver是web自动化的一本经典著作,吴老集合python java不同版本。本资源为java版本,内容较新,无论是入门还是提升都有很大帮助。
Selenium WebDriver 3 Practical Guide will walk you through the various APIs of Selenium WebDriver, which are used in automation tests, followed by a discussion of the various WebDriver implementations...
Selenium WebDriver 3.14.0 本来需要.net45 我改为.net2.0 希望喜欢的人需要。 dll 反编译,嵌入程序内。无需调用那个讨厌的dll。 绝对不骗人,骗人是小狗。架构复杂修改麻烦,各位体谅
Selenium WebDriver Practical Guide will guide you through the various APIs of WebDriver which should be used in automation tests, followed by a discussion of the various WebDriver implementations ...
seleniumwebdriver(python) (第三版)
selenium webdriver基于python源码案例,全是案例适合小白入门学习
selenium2.0自动化
Selenium WebDriver 学习笔记 API大全 中文API 元素 操作大全
1.2 selenium webdriver学习(二)————对浏览器的简单操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 selenium webdriver学习(三)------------执行js脚本 . . . . . . . . . . . . . ...
selenium WebDriver 安装包及启动服务的一些命令 对于正在学习自动化测试的小伙伴们非常有用
Selenium WebDriver Recipes in C#(2nd) 英文epub 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
对于Selenium更加详细的操作和使用,推荐一本书《selenium webdriver(python)第三版》,该书详细的讲解了webdriver的用法
本教程是来源与书 Selenium Testing Tools cookbook,但是其中的所有代码都是通过python来实现并且调试通过的。此文档为版本为粗略版,后期会不断的更新优化
自动化测试:Selenium webdriver学习笔记C#版
Selenium Webdriver自动化测试 operadriver win64位,最新版本(20150611)
悠悠的selenium webdriver基于python源码案例,全是案例适合小白入门学习,现在有的资源都是只有4章
selenium webdriver2 环境搭建