精简版 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);
            }
        }
    }
}

精简版 Selenium PageFactory, Annotation 实例的更多相关文章

  1. Vue精简版风格指南

    前面的话 Vue官网的风格指南按照优先级(依次为必要.强烈推荐.推荐.谨慎使用)分类,且代码间隔较大,不易查询.本文按照类型分类,并对部分示例或解释进行缩减,是Vue风格指南的精简版 组件名称 [组件 ...

  2. NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块

    前言 NETCore 里说到任务调度,大家首先想到的应该是大名鼎鼎的 QuartzNET 与 Hangfire,然而本篇介绍的却都不是,而是 Bootstrap Admin(以下简称 BA)通用后台权 ...

  3. Linux上oracle精简版客户端快速部署

    RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...

  4. ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址

    原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...

  5. TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍

    TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...

  6. Log4j快速使用精简版

    Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...

  7. VMware10.06精简版安装后台运行

    VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...

  8. [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)

    利用周末时间将整个电脑格式化,换成了ubuntu系统- 所谓:扫清屋子再请客! 但是有些软件只在win上有,于是还是考虑装个虚拟机来个——逐步过度策略,一点点地从win上转移到linux上 我的系统是 ...

  9. 电脑公司最新GHOST WIN7系统32,64位优化精简版下载

    系统来自系统妈:http://www.xitongma.com 电脑公司最新GHOST win7系统32位优化精简版V2016年3月 系统概述 电脑公司ghost win7 x86(32位)万能装机版 ...

随机推荐

  1. 在 React 组件中使用 Refs 指南

    原文:Fullstack React's Guide to using Refs in React Components作者:Yomi Eluwande译者:博轩 译文:https://segment ...

  2. 常用的排序算法介绍和在JAVA的实现(二)

    一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...

  3. linux下使用 TC 对服务器进行流量控制

    tc 介绍 在linux中,tc 有二种控制方法 CBQ 和 HTB.HTB 是设计用来替换 CBQ 的.HTB比CBQ更加灵活,但是CPU 开销也更大,通常高速的链路会使用CBQ,一般而言HTB使用 ...

  4. 阅读之Redis性能

    Redis作为一种KV缓存服务器,有着极高的性能,相对于memcache,Redis支持更多中数据类型,因此在业界广泛应用. Redis为什么快: 数据是存储在内存中的. Redis是单线程的. 将数 ...

  5. 实现分享功能(分享到qq空间,新浪微博)

        //分享QQ好友    function qq(title,url,pic)    {        var p = {            url: 'http://test.qichey ...

  6. Struts2基本原理【转】

    阐述struts2的执行流程. Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心控制器FilterD ...

  7. Huber loss<转发>

    from https://blog.csdn.net/lanchunhui/article/details/50427055请移步原文

  8. Visual Studio下__cplusplus宏为199711L的问题

    Visual Studio下__cplusplus宏为199711L的问题 / Zc:__ cplusplus(启用更新的__cplusplus宏) 该/ ZC:__ CPLUSPLUS编译器选项使_ ...

  9. 11、LineEdit与setCompleter自动补全

    #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug>//引入打印 ...

  10. EF 操作数据库中的表

    1.VS创建项目(实现数据库的增删改查.并在dataGridView中展示) 增.改通过Button,删通过快捷菜单ContextMenuStrip控件(DateGridView控件的ContextM ...