1. 程式人生 > >selenium中分離頁面元素(一)

selenium中分離頁面元素(一)

         可以將一個頁面或一類元素看做是一個頁面物件,一個頁面物件對應一個類,將元素物件的獲取定義在這一個類中,頁面的元素分別定義,然後分別呼叫,使用@FindBy(id="XX")、@CacheLookup、public WebElement XX,然後呼叫PageFactory.initElements()方法來初始化元素,如:將百度首頁的輸入框與搜尋按扭這兩個元素分離,編寫BaiduPage類,本文使用java編寫

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

/*
 * 把百度首頁的輸入框與搜尋按扭這兩個元素分離
 * 用PageFactory.initElements()方法來初始化元素
 */

public class BaiduPage {
	
	//定義百度首頁搜尋的輸入框
	@FindBy(id="kw")
	@CacheLookup
	public WebElement keyword_input;
	
	//定義百度首頁搜尋按扭
	@FindBy(id="su")
	@CacheLookup
	public WebElement search_button;
	
	//建立一個建構函式,並且呼叫PageFactory.initElements()方法來初始化元素,換句話說,將元素對映到我們定義好的變數上
	public BaiduPage(WebDriver driver) {
		PageFactory.initElements(driver, this);
	}	
}

1、@FindBy:這個定義了你所查詢的元素是以什麼方式定位的,用id定位,就寫成:@FindBy(id="kw"),還有其它的幾種寫法:

  (1)、@FindBy(name="XX");

  (2)、@FindBy(className="XX");

  (3)、@FindBy(xpath="XX");

  (4)、@FindBy(css="XX");

  等等

2、@CacheLookup:意思是說找到元素之後將快取元素,重複的使用這些元素,將使測試的速度大大加快

3、WebElement keyword_input:就是變數名

接下來我們寫一個測試類,分別呼叫BaiduPage類的keyword_input與search_button這兩個元素

import org.testng.annotations.Test;
import com.suning.encapsulation.BaiduPage;
import org.testng.annotations.BeforeTest;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterTest;

public class BaiduPageTest {
	
	WebDriver driver;
  
  @Test
  public void f() {
	  //例項化BaiduPage物件
	  BaiduPage page = new BaiduPage(driver);
	  
	  //page呼叫BaiduPage類中keyword_input元素,然後使用元素的sendKeys方法向輸入框中輸入selenium
	  page.keyword_input.sendKeys("selenium");
	  
	  //page呼叫BaiduPage類中search_button元素,然後呼叫元素的click方法點選搜尋按扭
	  page.keyword_input.click();
  }
  
  @BeforeTest
  public void beforeTest() {
	  driver = new FirefoxDriver();
	  driver.manage().window().maximize();
	  driver.get("http://baidu.com");
  }

  @AfterTest
  public void afterTest() {
	  driver.quit();
  }

}