在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过滤器视图的统计自动化的更多相关文章

  1. Django编写RESTful API(三):基于类的视图

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...

  2. Django REST FrameWork中文教程3:基于类的视图

    我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...

  3. django-rest-framework之基于类的视图

    前言:上一篇博客中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装饰器.同时,我们还介绍了APIView这个类,但是还没使用它 ...

  4. django 中基于类的视图

    django 视图 分为两种: 1.  FBV  基于函数的视图      function   based  view 2.  CBV  基于类的视图         class   based  ...

  5. 介绍——基于类的视图(class-based view)

    ​刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Class-based generic views) ...

  6. Django 基于类的视图(CBV)执行流程 CBV 源码分析

    一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...

  7. Django——基于类的视图源码分析 一

    基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...

  8. Django——基于类的视图源码分析 二

    源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...

  9. Django——基于类的视图(class-based view)

    刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Funcation-based generic vie ...

随机推荐

  1. Leetcode: Insert Delete GetRandom O(1) - Duplicates allowed

    Design a data structure that supports all following operations in average O(1) time. Note: Duplicate ...

  2. jsp eclipse 创建jsp项目

    选择File菜单 File->new->Other... 选择Dynamic Web Project项目->Next 写入项目->Finish 在WebContent鼠标右键- ...

  3. 2-sat(and,or,xor)poj3678

    Katu Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7949   Accepted: 2914 Descr ...

  4. Java SE series:1. environment configure and Hello world! [We use compiler and packager to create an application!]

    1. cli (command line interface) and gui (graphic user interface) use javahome path, search classpath ...

  5. ScrollView属性总结

    结构 继承关系 public class ScrollView extends FrameLayout java.lang.Object android.view.View android.view. ...

  6. Creating Directives that Communicate

    <my-tabs> <my-pane title="Hello"> <h4>Hello</h4> <p>Lorem ip ...

  7. mongo导出导入

    导出例子: mongoexport -d test -c test -q '{sn:1}' -o test.dat 导入例子: mongoimport -d test -c students stud ...

  8. 夺命雷公狗---DEDECMS----20dedecms取出栏目页对应的内容

    取出栏目页对应的内容 现在我们的栏目页面是可以完全正常跳转了,那么我们现在需要完成的就是让他的内容全部(电影,连续剧,综艺)分类的显示出来. 我们还是要使用{dede:arclist}标签来取出我们所 ...

  9. PTPX中的report 选项

    Report的生成 report_power表示产生power report,update_power表示进行power analysis. report_power命令可以生成四种形式的report ...

  10. RMQ(log2储存方法)

    RMQ 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 长度为n的数列A,以及q个询问,每次询问一段区间的最小值. 输入 第一 ...