用WebDriver实现基于jira过滤器视图的统计自动化

简介: 在Jira上通过过滤器我们可以做出多种视图,以方便统计我们想要收集的结果。比如:我想查看所有分派给我的任务。在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);
        }
    }

}

 

相关文章
|
数据采集 测试技术 Python
自动化淘宝秒杀:使用Selenium WebDriver的实战指南
本文详细介绍了如何利用Selenium WebDriver自动化淘宝秒杀操作,包括环境配置、代码实现及注意事项,旨在帮助读者提升秒杀成功率,同时提醒合理使用以遵守平台规则。
658 8
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
1408 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
1296 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
Web App开发 Java 测试技术
自动化测试的新篇章:使用Selenium WebDriver进行高效测试
【8月更文挑战第31天】 在软件开发的海洋中,自动化测试犹如一艘航船,带领着质量保证团队驶向效率与精准的彼岸。本文将揭开Selenium WebDriver的神秘面纱,通过实际案例引导您掌握这一强大的自动化测试工具。我们将从Selenium WebDriver的基础概念出发,逐步深入到代码示例,最后探讨其在现实项目中的应用场景和优势,旨在为您的软件测试之旅提供清晰的指南。
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
354 1
|
Web App开发 敏捷开发 Java
自动化测试中的神器 —— Selenium WebDriver
【8月更文挑战第31天】在软件开发的海洋里,自动化测试是那艘能带领我们驶向高效与精准彼岸的帆船。本文将带你领略Selenium WebDriver的魅力,从安装到实战,一步步解锁自动化测试的新境界。你将看到代码如何化繁为简,让重复的测试工作变得轻松愉快。让我们一起驾驭这股代码的风,向着软件质量的灯塔进发!
|
Web App开发 敏捷开发 测试技术
自动化测试之美:使用Selenium WebDriver进行网页功能验证
【8月更文挑战第29天】在数字时代,软件质量是企业竞争力的关键。本文将深入探讨如何通过Selenium WebDriver实现自动化测试,确保网页应用的可靠性和性能。我们将从基础设置到编写测试用例,逐步引导读者掌握这一强大的测试工具,同时分享实战经验,让测试不再是开发的负担,而是质量保证的利器。
|
Web App开发 测试技术 API
Web自动化测试框架(基础篇)--Selenium WebDriver工作原理和环境搭建
本文详细介绍了Selenium WebDriver的工作原理,包括其架构、通信机制及支持的浏览器,并指导读者如何在Python环境下搭建Selenium WebDriver的测试环境,从安装Python和Selenium库到编写并运行第一个自动化测试脚本。
782 0