Selenium自動化測試如何點選 iFrame中的Radio?

Selenium自動化測試如何點選 iFrame中的Radio?

這篇文章主要探討兩個小題目。

1. 如何處理網頁中有iFrame的網頁原件?

如果忽略掉iFrame的話,那麼自動化測試程式就會找不到該網頁原件而失敗。

2. 如何處理 Radio。以及Radio 的相關屬性。isSelected, isEnabled, isDisplayed等

情境

我們用這個網站為例子,說明如何點選右手邊的 Male,Male為一個 Radio的網頁元件

取得 Male的網頁元件之後,如何取得該 Radio相關屬性。

http://www.w3schools.com/html/tryit.asp?filename=tryhtml_radio

iFrameCase

 

iFrame

如果使用瀏覽器的 F12觀察,就會發現該 Male的Radio的網頁元件位在一個iFrame當中,

因此該iframe裡面所有的網頁原件,例如 Male, Female等Radio,都需要先正確的定位iframe才可以定位到Male, Female

iframeSample

 

如果使用 fireFox > FireBug如圖。圖中3說明該 Male Radio的網頁元件位於一個 iframe ID = “iframeResult”  中。

因此,對於Selenium程式來說,就必須先找到該iFrame才可以點選 Male Radio

如何定位該iFrame呢? 程式範例如下:

driver.switchTo().defaultContent(); // you are now outside both frames
driver.switchTo().frame(“iframeResult”);

Click Radio within iFrame

 

Radio

接著就可以處理 Radio button。使用 FireBug 或是其他工具,找出該Male Radio的 Xpath= //input[@value=’male’]

Selenium/Java 點選該 Male Radio 的程式範例如下:

driver.findElement(By.xpath(“//input[@value=’male’]”)).click();

如何知道該 Radio button 是否有被點選呢? 可以利用isSelected()這個屬性,回傳 true/false。

driver.findElement(By.xpath(“//input[@value=’male’]”)).isSelected()

 

程式範例

最後,整個可執行的程式範例如下:

[pastacode lang=”java” message=”Selenium Radio and iFrame” highlight=”” provider=”manual”]

package mySelenium;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit;

public class RadioButton {
	
	WebDriver driver;
	
	
	@Before
	public void setUp()
	{
		driver = new FirefoxDriver();
		driver.get("http://www.w3schools.com/html/tryit.asp?filename=tryhtml_radio");
		driver.manage().window().maximize();
		driver.manage().timeouts().implicitlyWait(10,  TimeUnit.SECONDS);
		
		
	}
	
	
	
  
	@Test
	public void testRadio(){
		// Locate the iframe first
		driver.switchTo().defaultContent(); // you are now outside both frames
		driver.switchTo().frame("iframeResult");

		System.out.println("****before click the Male Radio");
		System.out.println("The Output of the IsSelected " + driver.findElement(By.xpath("//input[@value='male']")).isSelected());
	    System.out.println("The Output of the IsEnabled " + driver.findElement(By.xpath("//input[@value='male']")).isEnabled());
	    System.out.println("The Output of the IsDisplayed " + driver.findElement(By.xpath("//input[@value='male']")).isDisplayed());
		
	    //Click the Male Radio button
	    driver.findElement(By.xpath("//input[@value='male']")).click();
		
		
		System.out.println("****after click the Male Radio");
		System.out.println("The Output of the IsSelected " + driver.findElement(By.xpath("//input[@value='male']")).isSelected());
	    System.out.println("The Output of the IsEnabled " + driver.findElement(By.xpath("//input[@value='male']")).isEnabled());
	    System.out.println("The Output of the IsDisplayed " + driver.findElement(By.xpath("//input[@value='male']")).isDisplayed());
		
	  }
	
	@After
	public void teadDown()
	{
		//Close the current window, quitting the browser
		driver.close();
		//Quits this driver, closing every associated window that was open.
		driver.quit();
	}
  
}

[/pastacode]

 

Leave a Reply

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