用WebDriver实现基于jira过滤器视图的统计自动化
在Jira上通过过滤器我们可以做出多种视图,以方便统计我们想要收集的结果。比如:我想查看所有分派给我的任务。在Jira上,我保存了一个过滤器,叫做“分派给我的所有任务”。这个过滤器可以过滤出所有分配给我的任务。下面我要对每一个分配给我的任务做一下统计,收集一些关键的字段值,并输出到excel表:
利用WebDriver实现,代码如下:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import javax.swing.filechooser.FileSystemView; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver; import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException; public class TestInfoGet { public static void main(String[] args) throws InterruptedException, IOException {
String webUrl = "http://jira.ms.netease.com/browse/LOTTERY-xxx?filter=xxxx";
WebDriver webDriver = new FirefoxDriver();
webDriver.get(webUrl);
waitUntilPageLoadedId(webDriver, "login-form-username");
webDriver.findElement(By.id("login-form-username")).sendKeys("username");
webDriver.findElement(By.id("login-form-password")).sendKeys("password");
webDriver.findElement(By.id("login-form-submit")).click();
webDriver.get(webUrl); // Main title.
waitUntilPageLoadedId(webDriver, "search-header-view");
String mainTitle = webDriver.findElement(By.id("search-header-view")).findElement(By.className("search-title"))
.getText();
System.out.println(mainTitle); // Write an excel.
try {
FileSystemView fsv = FileSystemView.getFileSystemView();
WritableWorkbook book = Workbook
.createWorkbook(new File(fsv.getHomeDirectory() + "\\" + mainTitle + ".xls"));
WritableSheet sheet = book.createSheet(mainTitle, 0);
List<String> labels = Arrays.asList("活动名称", "JIRA链接", "类型", "状态", "优先级", "解决结果", "模块", "平台", "测试类型", "bug数",
"用例数据", "报告人", "产品人员", "前端", "开发", "分派给");
for (int i = 0; i < labels.size(); i++) {
sheet.addCell(new Label(i, 0, labels.get(i)));
} // Get all sub titles.
waitUntilPageLoadedClass(webDriver, "issue-list");
WebElement webElement = webDriver.findElement(By.className("issue-list"));
List<WebElement> webElements = webElement.findElements(By.tagName("li"));
List<String> titles = new ArrayList<String>();
for (WebElement webElement2 : webElements) {
titles.add(webElement2.getAttribute("title"));
} // For each sub title.
for (int i = 1; i <= titles.size(); i++) {
String xPath = "//*[@title='" + titles.get(i - 1) + "']";
webDriver.findElement(By.xpath(xPath)).click();
waitUntilPageLoadedId(webDriver, "issue-content");
Thread.sleep(1000);
System.out.println("--------------------------------------------");
// Get the JIRA link.
System.out.println("活动名称:" + webDriver.findElement(By.id("summary-val")).getText());
sheet.addCell(new Label(0, i, webDriver.findElement(By.id("summary-val")).getText()));
String href = webDriver.findElement(By.id("key-val")).getAttribute("href");
// String link = "http://jira.ms.netease.com/browse/" + href;
System.out.println("JIRA链接:" + href);
sheet.addCell(new Label(1, i, href + " "));
waitUntilPageLoadedId(webDriver, "issuedetails");
// Issue details.
WebElement issueDetails = webDriver.findElement(By.id("issuedetails"));
String detailName, detailValue;
for (WebElement issueDetail : issueDetails.findElements(By.tagName("li"))) {
detailName = issueDetail.getText().split(":")[0];
detailValue = issueDetail.getText().split(":")[1].replaceAll("\n", "").split(" ")[0];
System.out.println(detailName + ":" + detailValue);
sheet = insertData(detailName, detailValue, sheet, i);
}
// Custom field module.
try {
WebElement customModule = webDriver.findElement(By.id("customfieldmodule"));
String moduleText, moduleName, moduleValue;
for (WebElement cModule : customModule.findElements(By.className("item"))) {
moduleText = cModule.getText().replaceAll("\n", "");
System.out.println(moduleText);
moduleName = moduleText.split(":")[0];
moduleValue = moduleText.split(":")[1];
sheet = insertData(moduleName, moduleValue, sheet, i);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}
// Participates.
WebElement pd = webDriver.findElement(By.id("peoplemodule"))
.findElement(By.className("people-details"));
String pCategory, pName;
for (WebElement webElement3 : pd.findElements(By.tagName("dl"))) {
System.out.println(webElement3.findElement(By.tagName("dt")).getText()
+ webElement3.findElement(By.tagName("dd")).getText());
pCategory = webElement3.findElement(By.tagName("dt")).getText().split(":")[0];
pName = webElement3.findElement(By.tagName("dd")).getText();
sheet = insertData(pCategory, pName, sheet, i);
}
}
book.write();
book.close();
} catch (WriteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} } private static WritableSheet insertData(String name, String value, WritableSheet sheet, int i)
throws RowsExceededException, WriteException {
// TODO Auto-generated method stub
int j = 16;
switch (name) {
case "类型":
j = 2;
sheet.addCell(new Label(j, i, value));
break;
case "状态":
j = 3;
sheet.addCell(new Label(j, i, value));
break;
case "优先级":
j = 4;
sheet.addCell(new Label(j, i, value));
break;
case "解决结果":
j = 5;
sheet.addCell(new Label(j, i, value));
break;
case "模块":
j = 6;
sheet.addCell(new Label(j, i, value));
break;
case "平台":
j = 7;
sheet.addCell(new Label(j, i, value));
break;
case "测试类型":
j = 8;
sheet.addCell(new Label(j, i, value));
break;
case "bug数":
j = 9;
sheet.addCell(new Label(j, i, value));
break;
case "用例数据":
j = 10;
sheet.addCell(new Label(j, i, value));
break;
case "用例数":
j = 10;
sheet.addCell(new Label(j, i, value));
break;
case "报告人":
j = 11;
sheet.addCell(new Label(j, i, value));
break;
case "产品人员":
j = 12;
sheet.addCell(new Label(j, i, value));
break;
case "前端":
j = 13;
sheet.addCell(new Label(j, i, value));
break;
case "开发":
j = 14;
sheet.addCell(new Label(j, i, value));
break;
case "分派给":
j = 15;
sheet.addCell(new Label(j, i, value));
break;
}
return sheet;
} private static void waitUntilPageLoadedId(WebDriver iw, String v) throws InterruptedException {
try {
iw.findElement(By.id(v));
} catch (Exception ex) {
System.out.println(ex.toString());
Thread.sleep(1000);
waitUntilPageLoadedId(iw, v);
}
} private static void waitUntilPageLoadedClass(WebDriver iw, String v) throws InterruptedException {
try {
iw.findElement(By.className(v));
} catch (Exception ex) {
System.out.println(ex.toString());
Thread.sleep(1000);
waitUntilPageLoadedClass(iw, v);
}
} }
用WebDriver实现基于jira过滤器视图的统计自动化的更多相关文章
- Django编写RESTful API(三):基于类的视图
欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...
- Django REST FrameWork中文教程3:基于类的视图
我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...
- django-rest-framework之基于类的视图
前言:上一篇博客中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装饰器.同时,我们还介绍了APIView这个类,但是还没使用它 ...
- django 中基于类的视图
django 视图 分为两种: 1. FBV 基于函数的视图 function based view 2. CBV 基于类的视图 class based ...
- 介绍——基于类的视图(class-based view)
刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Class-based generic views) ...
- Django 基于类的视图(CBV)执行流程 CBV 源码分析
一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...
- Django——基于类的视图源码分析 一
基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...
- Django——基于类的视图源码分析 二
源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...
- Django——基于类的视图(class-based view)
刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Funcation-based generic vie ...
随机推荐
- JaveScript——简介、语法
JS简介: 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司(已被Oracle ...
- Subversion under Linux [Reprint]
一.安装 yum install subversion 二.配置 本系统采用为每个项目单独建一版本库的策略.配置文件,密码文件,访问控制文件等都放在版本库的conf目录下. 所以每次开始一个新项目都必 ...
- 算法训练 Torry的困惑(基本型)
http://lx.lanqiao.org/problem.page?gpid=T129 算法训练 Torry的困惑(基本型) 时间限制:1.0s 内存限制:512.0MB 问题描述 ...
- android Activity的启动模式与flag的见解
最近做一个安卓项目,想要实现的效果就是:当打开一个按钮的时候,启动了一个A功能,当用户返回到桌面再继续进去的时候,不过之前在哪个Activity,都会先跳转到A功能的那个界面,当用户点击返回的时候,再 ...
- 常用的sql函数
常用的sql函数 concat('hello','world') 结果:helloworld 作用:拼接 substr('helloworld',1,5) hello ...
- java 项目打包流程速记
1.与资源库同步 2.[解决冲突] --可能没有这一步 3.合并标记 4.清除一下项目-- clean 5.打包: run As -->Maven install 6.去服务备份原包,下载服务 ...
- -XX:+PrintGCTimeStamps 打印CG发生的时间戳
-XX:+PrintGCTimeStamps –打印CG发生的时间戳 –[GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374 ...
- 锋利的JQuery(六)
$.ajax():可以设定beforeSend.error.success.complete等 $.getScript():加载JS文件 $.getJSON():加载JSON文件 $.each():通 ...
- WebDriver一些常见问题的解决方法【转】
转至:http://www.cnblogs.com/sylovezp/p/4329770.html 1.Exception NoSuchElementException: 解决方法: 1)检查目标el ...
- Junit单步调试
单步调试:主要查看变量内容的变化 1.设置断点位置,设置在可能出现问题的代码 2.点击项目右键以Debug as方式运行程序 3.F5 --> step into 进入方法内部进行调试 ...