alert、confirm、prompt这样的js对话框在selenium1 时代处理起来比价麻烦,常常要用autoit来帮助处理。
而现在webdriver对这些弹出框做了专门的处理,使用selenium2处理对话框就变得十分方便简洁。

alert、confirm、prompt 不是 JavaScript 核心的函数。

alert 是 BOM 中的成员函数,具体说是 window.alert。

所以说,alert对话框显示在最前,并且禁止了浏览器页面其他的操作。废话不多说,看看怎么用webdriver操作这三种弹出框。

一、操作 Alert 弹框


alert在网页的HTML代码:

<input id="alert" type='button' value='alert'
onclick='alert("this is a [alert] window!");'/>

当我们点击这个按钮的时候,就会弹出alert弹框:


package com.automation.alert;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; /**
* 类说明:操作alert弹框
* <br/>
* @version 1.0
* 2016年11月19日 下午9:47:12
*/
public class AlertDemo {
private static WebDriver driver = null ;
private static String chromeDriverDir = "D:\\workspace\\A_Test\\resource\\chromedriver.exe"; public static void main(String[] args) {
//1.打开浏览器;
System.setProperty("webdriver.chrome.driver", chromeDriverDir);
driver = new ChromeDriver();
driver.manage().window().maximize(); //打开文件网址;
driver.get("file:///E:/desktop/upload.html"); //定位alert按钮对象;
WebElement alertButton = driver.findElement(By.id("alert")); //点击alert按钮,弹出alert弹出框
alertButton.click(); try {
//获取Alert弹框对象;
Alert alertWindow = driver.switchTo().alert(); //获取alert弹框的文本,并打印到控制台;
String alertText = alertWindow.getText();
System.out.println(alertText); //点击alert弹出框中的确定按钮;
alertWindow.accept();
} catch (NoAlertPresentException e) {
System.out.println("尝试操作的alert弹出框未找到!");
e.printStackTrace();
} }
}

二、操作confirm弹框


confirm在网页的HTML代码:

<input id="confirm" type='button' value='confirm'
onclick='confirm("this is a [confirm] window!");'/>

点击confirm按钮的是,弹出confirm弹框,这个弹框有两个按钮,一个确定按钮,一个取消按钮;


package com.automation.alert;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; /**
* 类说明:操作confirm弹框
* <br/>
* @version 1.0
* 2016年11月19日 下午9:46:47
*/
public class ConfirmDemo {
private static WebDriver driver = null ;
private static String chromeDriverDir = "D:\\workspace\\A_Test\\resource\\chromedriver.exe"; public static void main(String[] args) {
//1.打开浏览器;
System.setProperty("webdriver.chrome.driver", chromeDriverDir);
driver = new ChromeDriver();
driver.manage().window().maximize(); //打开文件网址;
driver.get("file:///E:/desktop/upload.html"); //定位confirm按钮对象;
WebElement confirmButton = driver.findElement(By.id("confirm")); //点击confirm按钮,弹出confirm弹出框
confirmButton.click(); //获取Alert弹框对象;
Alert confirmWindow = null; try {
confirmWindow = driver.switchTo().alert(); //获取confirm弹框的文本,并打印到控制台;
String confirmText = confirmWindow.getText();
System.out.println(confirmText); //点击confirm弹出框中的确定按钮;
confirmWindow.accept(); //重新操作,点击confirm弹框的取消按钮;
confirmButton.click();
confirmWindow = driver.switchTo().alert();
confirmWindow.dismiss(); } catch (NoAlertPresentException e) {
System.out.println("尝试操作的confirm弹出框未找到!");
e.printStackTrace();
}
}
}

三、操作prompt弹框


prompt在网页的HTML代码:

<input id="prompt" type='button' value='prompt'
onclick='prompt("this is a [prompt] window!","1111");'/>

点击prompt按钮的是,弹出prompt弹框,这个弹框有两个按钮、一个输入框;

QQ图片20161119215628.png705x240 12.7 KB

package com.automation.alert;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; /**
* 类说明:操作prompt弹框
* <br/>
* @version 1.0
* 2016年11月19日 下午10:02:42
*/
public class PromptDemo {
private static WebDriver driver = null ;
private static String chromeDriverDir = "D:\\workspace\\A_Test\\resource\\chromedriver.exe"; public static void main(String[] args) {
//1.打开浏览器;
System.setProperty("webdriver.chrome.driver", chromeDriverDir);
driver = new ChromeDriver();
driver.manage().window().maximize(); //打开文件网址;
driver.get("file:///E:/desktop/upload.html"); //定位prompt按钮对象;
WebElement promptButton = driver.findElement(By.id("prompt")); //点击prompt按钮,弹出prompt弹出框
promptButton.click(); //获取Alert弹框对象;
Alert promptWindow = null; try {
promptWindow = driver.switchTo().alert(); //获取prompt弹框的文本,并打印到控制台;
String confirmText = promptWindow.getText();
System.out.println(confirmText); //向prompt弹框中的输入框对象,输入文本;
promptWindow.sendKeys("selenium + webdriver!"); //点击prompt弹出框中的确定按钮;
promptWindow.accept(); //重新操作,点击prompt弹框的取消按钮;
promptButton.click();
promptWindow = driver.switchTo().alert();
promptWindow.dismiss(); } catch (NoAlertPresentException e) {
System.out.println("尝试操作的prompt弹出框未找到!");
e.printStackTrace();
}
}
}

从以上代码可以看出driver.switchTo().alert();这句可以得到 alert \ confirm \ prompt 对话框的对象,然后运用其方法对它进行操作。对话框操作的主要方法有:

getText() 得到它的文本值
accept() 相当于点击它的"确认"
dismiss() 相当于点击"取消"或者叉掉对话框
sendKeys() 输入值,这个alert\confirm没有对话框就不能用了,不然会报错。

我们专注于持续集成,更多原创请关注:www.hordehome.com

基于Selenium2+Java的UI自动化(6)-操作Alert、confirm、prompt弹出框的更多相关文章

  1. 基于js alert confirm样式弹出框

    基于js alert confirm样式弹出框.这是一款根据alert confirm优化样式的确认对话框代码. 在线预览   源码下载 实现的代码. html代码: <div id=" ...

  2. 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

    1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...

  3. 基于Selenium2+Java的UI自动化(1) - 原理和环境搭建

    一.Selenium2的原理 Selenium1是thoughtworks公司的一个产品经理,为了解决重复烦躁的验收工作,写的一个自动化测试工具,其原理是用JS注入的方 式来模拟人工的操作,但是由于J ...

  4. 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待

    一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.seleniu ...

  5. 基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本

    一.操作日期选择框 QQ图片20161118215530.png1336x545 22.6 KB 说明:日期选择框大部分是不支持前端输入的,因为这个对象是 readOnly,只读属性,selenium ...

  6. 基于Selenium2+Java的UI自动化(2) - 启动浏览器

    一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...

  7. 基于Selenium2+Java的UI自动化(3) - 页面元素定位

    一.几种网页定位方式 webdriver的页面定位很灵活,提供了8种定位方式: 其中,常见的有三种:id .cssSelector .xpath: 一个元素如果存在 id 属性,则这个 id 的值,在 ...

  8. Java Selenium - 几种对话框处理Alert\confirm\prompt

    1. Alert , 先用常规办法定位到能触发alert的按钮 , 然后 Alert alert = driver.switchTo().alert(); alert.accept(); 如果aler ...

  9. Selenium+java - 弹出框处理

    一.弹出框分类: 弹出框分为两种,一种基于原生JavaScript写出来的弹窗,另一种是自定义封装好的样式的弹出框,本文重点介绍原生JavaScript写出来的弹窗,另一种弹窗用click()基本就能 ...

随机推荐

  1. FreeRTOS基础以及UIP之协程--C语言剑走偏锋

    在FreeRTOS中和UIP中,都使用到了一种C语言实现的多任务计数,专业的定义叫做协程(coroutine),顾名思义,这是一种协作的例程, 跟具有操作系统概念的线程不一样,协程是在用户空间利用程序 ...

  2. double和real型有什么区别 [

    DOUBLE是双精度浮点数REAL  是实数类型,他包括 DOUBLE,SINGLE等类型

  3. sed与正则用法收集

    1.将文本每行最后七个字符换成!号 sed   -n  's#.\{7\}$#!#p' ooo 在文本的每一行前添加#符号 sed  's/^.\?/#&/' passwd &  替代 ...

  4. <libxml2/tree.h> file not found

    Build Settings: head search paths :$(inherited) /usr/include/libxml2 Build phases: 加上libxml2.tbd

  5. BootStrap TreeView使用示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. windows下Nodejs环境部署

    前言 Nodejs是基于v8引擎的轻量级框架,其特点为事件驱动.非阻塞.单线程.异步回调等. Nodejs相对于其他运行在服务器端的语言,容易学习,使用方便. 本文将介绍windows下Nodejs的 ...

  7. WGCNA算法研究笔记

    转自:http://www.gogoqq.com/ASPX/8390905/JournalContent/1303140588.aspx 研究了近半年的算法,记录下来给自己一个交代,也应该是考G前地最 ...

  8. GoLang(第一篇 安装)

    golang官网:https://golang.org 中文文档:docscn.studygolang.com/doc/ 一:环境变量设置 导入环境变量GOROOT:export GOROOT=/us ...

  9. origin从图中获得数据

    有Origin的原图,即利用Origin的"copy page"功能直接拷贝到文字处理软件的数据图,对于这种图,双击用Origin打开后,双击要导出数据的权限,打开"pl ...

  10. Java学习之旅开篇:运行机制及环境搭建

    在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...