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);
                }
            }
        }
    }
     
  • 相关阅读:
    星球居民突破 1800 人!
    测试数据管理
    解决InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name table_name. Please run mysql_upgrade
    Warning: file_get_contents(): open_basedir restriction in effect. File(/proc/uptime) is not within the allowed path(s)解决方法
    Java终止线程的三种方式
    线程中断interrupt
    Linux 开启防火墙 避免非干系人误操作的处理
    Oracle12c 快速启动命令设置
    Docker 运行 Redis Rabbitmq seata-server ftp 的简单办法
    mysql8 CentOS7 简要安装说明
  • 原文地址:https://www.cnblogs.com/backpacker/p/10935530.html
Copyright © 2011-2022 走看看