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弹框,这个弹框有两个按钮、一个输入框;
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