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
iFrame
如果使用瀏覽器的 F12觀察,就會發現該 Male的Radio的網頁元件位在一個iFrame當中,
因此該iframe裡面所有的網頁原件,例如 Male, Female等Radio,都需要先正確的定位iframe才可以定位到Male, Female
如果使用 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”); |
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]