zoukankan      html  css  js  c++  java
  • 精简版 Selenium PageFactory, Annotation 实例

    精简版 Selenium  PageFactory, Annotation 实例。

    先是类: HomePage

    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 很重要)

    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

    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 的:

    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);
                }
            }
        }
    }
     
  • 相关阅读:
    [ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例
    PS 滤镜算法原理——曝光过度
    PS 滤镜算法原理 ——马赛克
    OpenCV——彩色图像转成灰度图像
    [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
    【翻译】EXTJS 编码风格指南与实例
    【翻译】Ext JS最新技巧——2014-8-13
    [ExtJS5学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介
    [ExtJS5学习笔记]第八节 Extjs5的Ext.toolbar.Toolbar工具条组件及其应用
    [ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习
  • 原文地址:https://www.cnblogs.com/backpacker/p/10935530.html
Copyright © 2011-2022 走看看