用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 ...
随机推荐
- JavaScript----marquee滚动标签 图片无缝滚动 插入百度地图
页面的自动滚动效果,可由javascript来实现, 但是有一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用marquee ...
- html 字体加粗
<font style="font-weight: bold;">无敌小昆虫</font> <font>无敌小昆虫</font> f ...
- Codeforce Round #224 Div2
一下子没打,这比赛,就被虐成狗!
- SQL 面向对象
1.面向过程 int a = 10;int b =5;int c = a+b; int r1 = 10;int r2 = 5;double c = r1*r1*3.14 - r2*r2*3.14 缺点 ...
- II7下配置SSAS通过HTTP 远程链接访问
IIS7下配置SSAS通过HTTP远程连接 安装环境操作系统:Windows7.Windows Server2008IIS版本:7.5 IIS7下配置SSAS通过HTTP远程连接详细的步骤如下:1.首 ...
- location.reload
location.reload()-----重新加载缓存页面 location.reload(true)------重新加载服务器页面
- imread函数、namedWindow函数、imshow函数、imwrite函数
1.imread函数 首先,我们看imread函数,可以在OpenCV官方文档中查到其原型如下: Mat imread(const string& filename, int flags=1 ...
- hadoop 启动停止命令
1 批量启动与停止 1.1 Start-all.sh # Start all hadoop daemons. Run this on master node. bin=`dirname ...
- C++线性方程求解
介绍 程序SolveLinearEquations解决联立方程.该方案需要一个文本文件,其中包含输入和输出方程解决.这个项目是几年前我写在C#中http://www.codeproject.com/A ...
- 视频处理控件TVideoGrabber如何对屏幕进行录制/压缩
TVideoGrabber可以对屏幕进行录制和压缩,本文来详细的说明在多种情况下TVideoGrabber是如何实现屏幕的录制和压缩. 屏幕录制 当VideoSource = vs_ScreenRec ...