1

我从谷歌获得了示例代码并尝试过,

测试场景:使用TestNG将测试结果导出到excel

安装 TestNG 和 Jars Apache jar poi-4.1.1 Selenium 独立 jar Selenium-server-standalone-2.7.0-patched 资源

我遇到的错误很少,请高手帮忙解决。公共 UImap 抛出错误

代码:

package com.techbeamers.testng;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class SaveTestNGResultToExcel {

    public WebDriver driver;
    public UIMap uimap;
    public UIMap datafile;
    public String workingDir;

    // Declare An Excel Work Book
    HSSFWorkbook workbook;
    // Declare An Excel Work Sheet
    HSSFSheet sheet;
    // Declare A Map Object To Hold TestNG Results
    Map<String, Object[]> TestNGResults;
    public static String driverPath = "C:\workspace\tools\selenium\";

    @Test(description = "Opens the TestNG Demo Website for Login Test", priority = 1)
    public void LaunchWebsite() throws Exception {

        try {
            driver.get("http://phptravels.net/login");
            driver.manage().window().maximize();
            TestNGResults.put("2", new Object[] { 1d, "Navigate to demo website", "Site gets opened", "Pass" });
        } catch (Exception e) {
            TestNGResults.put("2", new Object[] { 1d, "Navigate to demo website", "Site gets opened", "Fail" });
            Assert.assertTrue(false);
        }
    }

    @Test(description = "Fill the Login Details", priority = 2)
    public void FillLoginDetails() throws Exception {

        try {
            // Get the username element
            WebElement username = driver.findElement(uimap.getLocator("Username_field"));
            username.sendKeys(datafile.getData("username"));

            // Get the password element
            WebElement password = driver.findElement(uimap.getLocator("Password_field"));
            password.sendKeys(datafile.getData("password"));

            Thread.sleep(1000);

            TestNGResults.put("3", new Object[] { 2d, "Fill Login form data (Username/Password)",
                    "Login details gets filled", "Pass" });

        } catch (Exception e) {
            TestNGResults.put("3",
                    new Object[] { 2d, "Fill Login form data (Username/Password)", "Login form gets filled", "Fail" });
            Assert.assertTrue(false);
        }
    }

    @Test(description = "Perform Login", priority = 3)
    public void DoLogin() throws Exception {

        try {
            // Click on the Login button
            WebElement login = driver.findElement(uimap.getLocator("Login_button"));
            login.click();

            Thread.sleep(1000);
            // Assert the user login by checking the Online user
            WebElement onlineuser = driver.findElement(uimap.getLocator("online_user"));
            AssertJUnit.assertEquals("Hi, John Smith", onlineuser.getText());
            TestNGResults.put("4",
                    new Object[] { 3d, "Click Login and verify welcome message", "Login success", "Pass" });
        } catch (Exception e) {
            TestNGResults.put("4",
                    new Object[] { 3d, "Click Login and verify welcome message", "Login success", "Fail" });
            Assert.assertTrue(false);
        }
    }

    @BeforeClass(alwaysRun = true)
    public void suiteSetUp() {

        // create a new work book
        workbook = new HSSFWorkbook();
        // create a new work sheet
        sheet = workbook.createSheet("TestNG Result Summary");
        TestNGResults = new LinkedHashMap<String, Object[]>();
        // add test result excel file column header
        // write the header in the first row
        TestNGResults.put("1", new Object[] { "Test Step No.", "Action", "Expected Output", "Actual Output" });

        try {

            // Get current working directory and load the data file
            workingDir = System.getProperty("user.dir");
            datafile = new UIMap(workingDir + "\Resources\datafile.properties");
            // Get the object map file
            uimap = new UIMap(workingDir + "\Resources\locator.properties");

            // Setting up Chrome driver path.
            System.setProperty("webdriver.chrome.driver", driverPath + "chromedriver.exe");
            // Launching Chrome browser.
            driver = new ChromeDriver();
            driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        } catch (Exception e) {
            throw new IllegalStateException("Can't start the Firefox Web Driver", e);
        }

    }

    @AfterClass
    public void suiteTearDown() {
        // write excel file and file name is SaveTestNGResultToExcel.xls
        Set<String> keyset = TestNGResults.keySet();
        int rownum = 0;
        for (String key : keyset) {
            Row row = sheet.createRow(rownum++);
            Object[] objArr = TestNGResults.get(key);
            int cellnum = 0;
            for (Object obj : objArr) {
                Cell cell = row.createCell(cellnum++);
                if (obj instanceof Date)
                    cell.setCellValue((Date) obj);
                else if (obj instanceof Boolean)
                    cell.setCellValue((Boolean) obj);
                else if (obj instanceof String)
                    cell.setCellValue((String) obj);
                else if (obj instanceof Double)
                    cell.setCellValue((Double) obj);
            }
        }
        try {
            FileOutputStream out = new FileOutputStream(new File("SaveTestNGResultToExcel.xls"));
            workbook.write(out);
            out.close();
            System.out.println("Successfully saved Selenium WebDriver TestNG result to Excel File!!!");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // close the browser
        driver.close();
        driver.quit();
    }
}

以下是错误 错误:

org.testng.TestNGException: 
Cannot instantiate class com.techbeamers.testng.SaveTestNGResultToExcel
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:40)
    at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:363)
    at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:275)
    at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:126)
    at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:191)
    at org.testng.TestClass.getInstances(TestClass.java:100)
    at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:86)
    at org.testng.TestClass.init(TestClass.java:78)
    at org.testng.TestClass.<init>(TestClass.java:41)
    at org.testng.TestRunner.initMethods(TestRunner.java:425)
    at org.testng.TestRunner.init(TestRunner.java:252)
    at org.testng.TestRunner.init(TestRunner.java:222)
    at org.testng.TestRunner.<init>(TestRunner.java:171)
    at org.testng.remote.support.RemoteTestNG6_10$1.newTestRunner(RemoteTestNG6_10.java:28)
    at org.testng.remote.support.RemoteTestNG6_10$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_10.java:61)
    at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:623)
    at org.testng.SuiteRunner.init(SuiteRunner.java:189)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:136)
    at org.testng.TestNG.createSuiteRunner(TestNG.java:1375)
    at org.testng.TestNG.createSuiteRunners(TestNG.java:1355)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1209)
    at org.testng.TestNG.runSuites(TestNG.java:1133)
    at org.testng.TestNG.run(TestNG.java:1104)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29)
    ... 25 more
Caused by: java.lang.Error: Unresolved compilation problems: 
    UIMap cannot be resolved to a type
    UIMap cannot be resolved to a type
    Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )
    UIMap cannot be resolved to a type
    UIMap cannot be resolved to a type
    UIMap cannot be resolved to a type
    UIMap cannot be resolved to a type
    UIMap cannot be resolved to a type
    UIMap cannot be resolved to a type
    Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

    at com.techbeamers.testng.SaveTestNGResultToExcel.<init>(SaveTestNGResultToExcel.java:29)
    ... 30 more
4

0 回答 0