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);
                }
            }
        }
    }
     
  • 相关阅读:
    (13)使用Ajax Helper 提高用户体验
    (12)改变图片的大小生成缩略图
    (11)通过表单上传文件
    程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理
    xCode 4.X 免证书真机发布及调试
    35岁前必须做好的10件事情(转载)
    独自收集Cocos2d提供的字体!共57种(有对照的字体图)
    (10)根据关键字搜索
    tcp拥塞控制
    dpcnv reademe
  • 原文地址:https://www.cnblogs.com/backpacker/p/10935530.html
Copyright © 2011-2022 走看看