精簡版 Selenium PageFactory, Annotation 實例。
先是類: HomePage
java
package com.test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class HomePage {
@FindBy(id="kw")
public WebElement SearchTextField;
@FindBy(id="su")
public WebElement SearchButton;
public void clearSearchTextField() {
SearchTextField.clear();
}
public void inputSearchTextFeild(String str) {
SearchTextField.sendKeys(str);
}
public void clickSearchButton(){
SearchButton.click();
}
}
再是定義的 Annotation 類,起名叫:AnnotationFactory。(其中的 RetentionPolicy.RUNTIME 很重要)
ui
package com.test;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Documented
public @interface AnnotationFactory {
String batchName();
int testOrder() default 0;
String author() default "allen";
}
具體的 Test Case, 用 PageFactory 實例化 HomePage 類,同時也添加了 annotation
spa
package com.test;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.PageFactory;
@AnnotationFactory(batchName="Smoketest1", testOrder = 2, author = "Mike")
public class SearchBD {
private WebDriver driver = new FirefoxDriver();
private String baseUrl = "https://www.baidu.com/";
HomePage homePage = PageFactory.initElements(driver, HomePage.class);
@Test
public void testHelloWorld() throws Exception {
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get(baseUrl);
//Use page factory and its methods
homePage.clearSearchTextField();
homePage.inputSearchTextFeild("Hello world");
homePage.clickSearchButton();
driver.quit();
}
}
那麼咱們如何解析那些 annotation, 而後進一步根據 batchname, testOrder 分類執行呢?
這個類就是解析 annotation 的:
firefox
package com.test; import java.lang.annotation.Annotation; public class GetAnnotations { public static void main(String[] args) throws ClassNotFoundException { getAnnotationData("com.test.SearchBD"); } private static void getAnnotationData(String caseName) throws ClassNotFoundException { System.out.println("---start----"); Annotation[] annotations = Class.forName(caseName).getAnnotations(); for(Annotation annotation : annotations) { if(annotation instanceof AnnotationFactory) { AnnotationFactory af = (AnnotationFactory) annotation; String batchName = af.batchName(); int testOrder = af.testOrder(); String author = af.author(); System.out.println(batchName + " " + testOrder + " " + author); } } } }