我从谷歌获得了示例代码并尝试过,
测试场景:使用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