可以将一个页面或一类元素看做是一个页面对象,一个页面对象对应一个类,将元素对象的获取定义在这一个类中,页面的元素分别定义,然后分别调用,使用@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();
}
}