精简版 Selenium PageFactory, Annotation 实例
先是类: HomePage
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 很重要)
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AnnotationFactory {
String batchName();
int testOrder() default 0;
String author() default "allen";
}
具体的 Test Case, 用 PageFactory 实例化 HomePage 类,同时也添加了 annotation
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 的:
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 实例的更多相关文章
- Vue精简版风格指南
前面的话 Vue官网的风格指南按照优先级(依次为必要.强烈推荐.推荐.谨慎使用)分类,且代码间隔较大,不易查询.本文按照类型分类,并对部分示例或解释进行缩减,是Vue风格指南的精简版 组件名称 [组件 ...
- NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块
前言 NETCore 里说到任务调度,大家首先想到的应该是大名鼎鼎的 QuartzNET 与 Hangfire,然而本篇介绍的却都不是,而是 Bootstrap Admin(以下简称 BA)通用后台权 ...
- Linux上oracle精简版客户端快速部署
RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...
- ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址
原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...
- TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍
TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...
- Log4j快速使用精简版
Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...
- VMware10.06精简版安装后台运行
VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...
- [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)
利用周末时间将整个电脑格式化,换成了ubuntu系统- 所谓:扫清屋子再请客! 但是有些软件只在win上有,于是还是考虑装个虚拟机来个——逐步过度策略,一点点地从win上转移到linux上 我的系统是 ...
- 电脑公司最新GHOST WIN7系统32,64位优化精简版下载
系统来自系统妈:http://www.xitongma.com 电脑公司最新GHOST win7系统32位优化精简版V2016年3月 系统概述 电脑公司ghost win7 x86(32位)万能装机版 ...
随机推荐
- 【版本控制工具】 Git基础
一.Git简介 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.于是Git 成了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. (Git目前使用率非常 ...
- 理解js异步编程
Promise 背景 javascript语言的一大特点就是单线程,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码,也就是说,同一个时间只能做一件事. 怎么做到异步编程?回调函数.直到no ...
- LVM使用手册简化命令
创建 hot_add --查看新增的lun pvcreate /dev/sdb --创建物理卷 pvcreate /dev/sdc --创建物理卷 pvcreate /dev/sdd ...
- 基于nginx与Tomcat实现负载均衡
server1:192.168.200.113(nginx服务端) server2:192.168.200.111(Tomcat服务端) server1中nginx的配置文件 nginx.conf h ...
- Qt Creator 4.10 Beta版发布
使用Qt Creator 4.10 Beta,现在支持固定文件,因此即使在关闭所有文件时它们仍然保持打开状态,围绕语言服务器协议支持继续集成,将Android目标添加到CMake/Qbs项目,支持Bo ...
- laravel-admin 添加图表 Chartjs
github地址:https://github.com/laravel-admin-extensions/chartjs Installation composer require laravel-a ...
- 【AGC010 C】Cleaning
题意 有一棵 \(n\) 个点的树,第 \(i\) 个节点有 \(a_i\) 个石子. 每次都可以选择一对不同的叶子节点,这对叶子节点路径上的所有点都必须要有石子.然后去掉这两个叶子节点路径上的每个节 ...
- ZOJ red black tree
#include <bits/stdc++.h> #define fi first #define se second #define lson l,m,rt<<1 #defi ...
- hive不分区增量更新
insert overwrite table ods.zeg_so select *,case when zsm.id is not null then cast(current_timestamp ...
- win redis安装
一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...