alert、confirm仪缸、prompt這樣的js對(duì)話框在selenium1.X時(shí)代也是難啃的骨頭贵涵,常常要用autoit來幫助處理。
試用了一下selenium webdriver中處理這些對(duì)話框十分方便簡(jiǎn)潔恰画。以下面html代碼為例:
<html>
<head>
<title>Alert</title>
</head>
<body>
<input id = "alert" value = "alert" type = "button" onclick = "alert('歡迎宾茂!請(qǐng)按確認(rèn)繼續(xù)!');"/>
<input id = "confirm" value = "confirm" type = "button" onclick = "confirm('確定嗎拴还?');"/>
<input id = "prompt" value = "prompt" type = "button" onclick = "var name = prompt('請(qǐng)輸入你的名字:','請(qǐng)輸入
你的名字'); document.write(name) "/>
</body>
</html>
以上html代碼在頁面上顯示了三個(gè)按鈕跨晴,點(diǎn)擊他們分別彈出alert、confirm片林、prompt對(duì)話框端盆。如果在prompt對(duì)話框中輸入文字點(diǎn)擊確定之后,將會(huì)刷新頁面费封,顯示出這些文字 焕妙。
selenium webdriver 處理這些彈層的代碼如下:
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class DialogsStudy {
/**
* @author gongjf
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
WebDriver dr = new FirefoxDriver();
String url = "file:///C:/Documents and Settings/gongjf/桌面/selenium_test/Dialogs.html";// "/Your/Path/to/main.html"
dr.get(url);
//點(diǎn)擊第一個(gè)按鈕寄啼,輸出對(duì)話框上面的文字越败,然后叉掉
dr.findElement(By.id("alert")).click();
Alert alert = dr.switchTo().alert();
String text = alert.getText();
System.out.println(text);
alert.dismiss();
//點(diǎn)擊第二個(gè)按鈕,輸出對(duì)話框上面的文字衡瓶,然后點(diǎn)擊確認(rèn)
dr.findElement(By.id("confirm")).click();
Alert confirm = dr.switchTo().alert();
String text1 = confirm.getText();
System.out.println(text1);
confirm.accept();
//點(diǎn)擊第三個(gè)按鈕韧献,輸入你的名字末患,然后點(diǎn)擊確認(rèn),最后
dr.findElement(By.id("prompt")).click();
Alert prompt = dr.switchTo().alert();
String text2 = prompt.getText();
System.out.println(text2);
prompt.sendKeys("jarvi");
prompt.accept();
}
}
從以上代碼可以看出dr.switchTo().alert();這句可以得到alert\confirm\prompt對(duì)話框的對(duì)象锤窑,然后運(yùn)用其方法對(duì)它進(jìn)行操作璧针。對(duì)話框操作的主要方法有:
getText() 得到它的文本值
accept() 相當(dāng)于點(diǎn)擊它的"確認(rèn)"
dismiss() 相當(dāng)于點(diǎn)擊"取消"或者叉掉對(duì)話框
sendKeys() 輸入值,這個(gè)alert\confirm沒有對(duì)話框就不能用了渊啰,不然會(huì)報(bào)錯(cuò)探橱。