Selenium自動化測試:如何處理 JavaScript Alert
這篇文章主要說明當有 JavaScript Alert的popup 出現時,Selenium自動化測試程式要如何處理?
自動化測試程式常常因為 Alert的這些視窗導致測試失敗。因此,有效的處理這些訊息Alert也是自動化測試重要的一環。
最後,筆者也舉一個完整的 Selenium/Java為例子,說明如何處理這樣的 alert.
測試情境
這個畫面中,右手邊有一個 “Try it” 按鈕。按鈕按下之後,會出現一個 JavaScript 視窗。
這個JavaScript 視窗上密的文字訊息 “Please enter your name”,利用Selenium驗證這段文字
接著我們利用程式模擬輸入 my name
利用Selenium點選 OK
最後在畫面訊息驗證剛剛輸入的 my name
http://www.w3schools.com/js/tryit.asp?filename=tryjs_prompt
程式說明
將目前控制的焦點切換到Alert的視窗,並且取得Alert視窗上的文字訊息
Alert alert = driver.switchTo().alert(); String textOnAlert = alert.getText(); |
點選 alert 視窗的 OK
alert.accept(); |
若要點選 Cancel的話,可以利用 dismiss()
alert.dismiss(); |
另外這個程式主要分為兩個測試個案
testAlert() :主要點選 alert 視窗,驗證 alert上的文字內容
testMsg():主要是驗證 alert 輸入的名子,在Alert確定完之後,網頁上顯示name的訊息結果
完整程式範例
[pastacode lang=”java” message=”Selenium Alert handling” highlight=”” provider=”manual”]
package mySelenium;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.thoughtworks.selenium.Wait;
import static org.junit.Assert.*;
public class myAlert {
public static WebDriver driver;
@BeforeClass
public static void setUp()
{
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.w3schools.com/js/tryit.asp?filename=tryjs_prompt");
driver.manage().window().maximize();
}
@Test
public void testAlert()
{
driver.switchTo().defaultContent();
//Activate the frame on left side using it's id attribute
driver.switchTo().frame("iframeResult");
//Get an element from the frame on left side and verify it's contents
WebElement TryIt = driver.findElement(By.xpath("//button[contains(.,'Try it')]"));
//Click Try It button
TryIt.click();
Alert alert = driver.switchTo().alert();
String textOnAlert = alert.getText();
System.out.println("text on alert popup:" + textOnAlert);
assertEquals("Please enter your name",textOnAlert);
alert.sendKeys("myName");
// This is to click OK
alert.accept();
// This is to click cancel
//alert.dismiss();
}
@Test
public void testMsg() throws InterruptedException {
//WebDriverWait wait = new WebDriverWait(driver, 10);
//WebElement ResultMsg = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='demo']")));
Thread.sleep(3000);
WebElement ResultMsg = driver.findElement(By.xpath("//*[@id='demo']"));
System.out.println("Result Message =" + ResultMsg.getText());
// assertEquals("Hello myName! How are you today?",ResultMsg.getText());
}
@AfterClass
public static void tearDown()
{
//Close the Parent Popup Window
driver.close();
driver.quit();
}
}
[/pastacode]