selenium+testNgTest实例

一、selenium

1.1 Maven依赖包

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.3.0</version>
            <!--   <scope>test</scope>  -->
        </dependency>

1.2 Driver 封装代码

1.3 页面元素操作

package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class BaiduSearchPages {
    WebDriver webDriver;

    By inputId = By.id("kw");

    By searchButtonId = By.id("su");

    public BaiduSearchPages(WebDriver webDriver) {
        this.webDriver = webDriver;
    }
    public void toUrl(String url){
        webDriver.get(url);
    }
    public void inputKey(String key){
        webDriver.findElement(inputId).sendKeys(key);
    }
    public void clickSearchButton(){
        webDriver.findElement(searchButtonId).click();
    }

}

二、testNg 测试

2.1 .1可以自己创建测试文件夹(这里 不演示步骤)
2.1.2 在需要测试的class 右键
在这里插入图片描述
按步骤选择creatnew test
在这里插入图片描述
选择testng ,要测试的method
在这里插入图片描述
testNG测试代码

package pages;

import managers.BrowserDiverManager;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class BaiduSearchPagesTest {

    WebDriver driver = BrowserDiverManager.getWebdriverInstance();
    BaiduSearchPages baiduSearchPages;

    @BeforeTest
    public void setUp(){
        baiduSearchPages = new BaiduSearchPages(driver);
        baiduSearchPages.toUrl("https://www.baidu.com/");
    }
    @Test
    public void testInputKey() {
        baiduSearchPages.inputKey("测试");
    }

    @Test
    public void testClickSearchButton() {
        baiduSearchPages.clickSearchButton();
    }
    @AfterTest
    public void tearDown(){
        driver.close();
    }
}

没有加入testNG.xml 控制,直接run 就行

三、生成报告

3.1 testNg 自带report 生成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
个人觉得有点不好看,所以不展开说了,后续会用ExtentReport

四、使用extentReport

4.1 maven 包 ,extentReport 不同版本会有点不同

        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports</artifactId>
            <version>5.0.8</version>
        </dependency>

4.2 创建ExtentReport 类

public class ExtentReportsCreateHelper {
    private static final String OUTPUT_FOLDER = "test-output/";
    private static final String FILE_NAME = "baidutest.html";
    private static ExtentReports extent;
    public static ExtentReports getInstance(){
        if (extent == null)
            createInstance();
        return extent;
    }

    private static void createInstance(){
        File reportDir = new File(OUTPUT_FOLDER);
        if (!reportDir.exists() && reportDir.isDirectory()){
            reportDir.mkdir();
        }
        extent = new ExtentReports();
        extent.attachReporter(createSparkReporter(OUTPUT_FOLDER+FILE_NAME));
        extent.setReportUsesManualConfiguration(true);
    }

    private static ExtentSparkReporter createSparkReporter(String filePath){
        ExtentSparkReporter extentSparkReporter = new ExtentSparkReporter(filePath);
        extentSparkReporter.config(ExtentSparkReporterConfig.builder()
                                            .theme(Theme.DARK)
                                            .reportName("搜索测试")
                                            .documentTitle("搜索测试")
                                            .build());
        return extentSparkReporter;
    }
}

4.3 实现TestNg IReport 接口,报告不完善,可以根据自己的需要调整

public class ExtentTestNgListenerHelper implements IReporter {

    private static ExtentReports extent = ExtentReportsCreateHelper.getInstance();

    @Override
    public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
        System.out.println("开始创建report==========");
        if (suites.size()>0){

            System.out.println("suites size:" + suites.size());
            for (ISuite suite:suites) {

                Map<String, ISuiteResult> results = suite.getResults();
                for (ISuiteResult r: results.values()) {
                    ITestContext testContext = r.getTestContext();
                    IResultMap failedTests = testContext.getFailedTests();
                    IResultMap skippedTests = testContext.getSkippedTests();
                    IResultMap passedTests = testContext.getPassedTests();
                    Iterator<ITestResult> iteratorF = failedTests.getAllResults().iterator();
                    Iterator<ITestResult> iteratorS = skippedTests.getAllResults().iterator();
                    Iterator<ITestResult> iteratorP = passedTests.getAllResults().iterator();
                     //失败用例写入
                    createTestModle(iteratorF,"fail");
                    //成功用例写入
                    createTestModle(iteratorP,"pass");
                    //Skip 用例写入
                    createTestModle(iteratorS,"skip");
                }
            }
            extent.flush();
            System.out.println("-=========创建报告成功");
        }


    }

    private void createTestModle(Iterator<ITestResult> iterator,String testResult){
        while (iterator.hasNext()){
            ITestResult next = iterator.next();
            ExtentTest test = extent.createTest(next.getName());
            test.getModel().setStartTime(getTime(next.getStartMillis()));
            test.getModel().setEndTime(getTime(next.getEndMillis()));
           switch (testResult){
               case "pass":
                   test.createNode(next.getName()).assignCategory(next.getName()).pass(next.getThrowable());
                   break;
               case "fail":
                   test.createNode(next.getName()).assignCategory(next.getName()).fail(next.getThrowable());
                   break;
               case "skip":
                   test.createNode(next.getName()).assignCategory(next.getName()).skip(next.getSkipCausedBy().stream().findFirst().toString());
           }

        }
    }
    private Date getTime(long millis){
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(millis);
        return calendar.getTime();
    }
}


在testNg 测试类上加上@ Listener

@Listeners(ExtentTestNgListenerHelper.class)
public class BaiduSearchPagesTest {

    WebDriver driver = BrowserDiverManager.getWebdriverInstance();
    BaiduSearchPages baiduSearchPages;

    @BeforeTest
    public void setUp(){
        baiduSearchPages = new BaiduSearchPages(driver);
        baiduSearchPages.toUrl("https://www.baidu.com/");
    }
    @Test
    public void testInputKey() {
        baiduSearchPages.inputKey("测试");
    }

    @Test
    public void testClickSearchButton() {
        baiduSearchPages.clickSearchButton();
    }
    @AfterTest
    public void tearDown(){
        driver.close();
    }
}

在这里插入图片描述
在这里插入图片描述

附录
troubleScreen
1、运行 testNg 报错
org.testng.TestNGException:
TestNG by default disables loading DTD from unsecured Urls. If you need to explicitly load the DTD from a http url, please do so by using the JVM argument [-Dtestng.dtd.http=true]
solution:
按提示在testng 运行文件加上 :-Dtestng.dtd.http=true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程介绍你是否在寻找机会进入自动化测试领域? 你是否渴望学习selenium webdriver + Java以及最新的框架和技术进行web自动化测试? 你是否感兴趣学习Selenium如何用在你现有的项目里的? 这门课带你从Selenium搭建环境开始讲起,然后学习seleniumTestNG, logback, maven, jenkins。 我们假设学员没有任何自动化经验,来设计的这套课程。每个课题都从最基础的开始讲起。Selenium相关的该覆盖的课题都覆盖了。 例子都是来自于真实的web应用项目,帮助你理解不同的组件怎么用上自动化,这将展示给你一个行业层面的框架,增加自信心。 全网没有其他课程像这门课涵盖到如此之深的细节。 您将会学到什么 学完课程以后,你将拥有完整的Selenium Webdriver知识 你将具备从头开始设计Page Object、Page Factory、DATADRIVEN等搭建自动化框架的能力 用100多个实例Selenium现实场景应用进行深入理解 全面了解TestNG, Maven, Jenkins, HTML报告,多浏览器并行测试 了解数据库测试和使用Selenium进行性能测试 你将彻底了解testNG框架 你从网上随便选择一个网站,都可以实现自动化,用所有可能的测试用例进行自动化测试 将提高你的编码技能,以编写最优化的自动化测试用例代码 你基本可以搞定任何Selenium面试,并能从设计阶段开始领导整个Selenium自动化项目 你应该能够使用应用程序的GUI来验证数据完整性 你将能够创建漂亮的报告来打动客户或领导 更深入地理解自动化指南和代码质量标准 会附带一个练习网站,可以用上所有可用的WebDriver功能,实现自动化 【适合人群】 软件手动测试人员想转为自动化测试的人员 自动化软件测试人员想加强专业技能的 刚毕业学生想从事软件行业 QA 组长或项目经理 【课程优势】 学完课程以后,你将拥有完整的Selenium Webdriver知识 【讲师介绍】 资质介绍: 12年以上软件测试工作经验,其中7年以上自动化测试开发经验 新书“Python3+Selenium3自动化测试项目实战”作者

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值