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