Selenium自動化測試:如何處理 JavaScript Alert

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
JavaScript Alert

程式說明

將目前控制的焦點切換到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]

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *