如何解决必须从Selenium创建可运行的JARTestNG / Maven项目
我已经使用POM方法创建了Hybrid Framework,现在我必须从Selenium创建Runnable JAR,客户端才能从其计算机执行该操作。我创建了TestRunner:
package gov.gao.qa.testcases;
import org.testng.TestNG;
import gov.gao.qa.listeners.ExtentReportListener;
public class TestRunner {
static TestNG testNG;
public static void main(String[] args) {
ExtentReportListener ext = new ExtentReportListener();
testNG = new TestNG();
testNG.setTestClasses(new Class[] {NewBluePTest.class});
testNG.addListener(ext);
testNG.run();
}
}
This is my Report.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="New Blue Publishing Regression Suite" verbose="2" thread-count="2" parallel="tests">
<listeners>
<listener
class-name="gov.gao.qa.listeners.ExtentReportListener" />
</listeners>
<test name="NBP Regression Test_chrome">
<parameter name="browser" value="chrome" />
<classes>
<class name="gov.gao.qa.testcases.NewBluePTest" />
</classes>
</test>
<test name="NBP Regression Test_firefox">
<parameter name="browser" value="firefox" />
<classes>
<class name="gov.gao.qa.testcases.NewBluePTest" />
</classes>
</test>
</suite>
***Extent Report Listener class:***
public class ExtentReportListener extends BasePage implements ITestListener {
private static final String OUTPUT_FOLDER = "./REPOSRTS/";
private static final String FILE_NAME = "TestExecutionReport.html";
private static ExtentReports extent = init();
public static ThreadLocal<ExtentTest> test = new ThreadLocal<ExtentTest>();
private static ExtentReports init() {
Path path = Paths.get(OUTPUT_FOLDER);
if (!Files.exists(path)) {
try {
Files.createDirectories(path);
} catch (IOException e) {
e.printStackTrace();
}
}
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);
htmlReporter.config().setDocumentTitle("New Blue Publishing Automation Test Results");
htmlReporter.config().setReportName("Automation Test Results");
htmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);
htmlReporter.config().setTheme(Theme.STANDARD);
extent = new ExtentReports();
extent.attachReporter(htmlReporter);
extent.setReportUsesManualConfiguration(true);
return extent;
}
public synchronized void onStart(ITestContext context) {
System.out.println("Test Suite started!");
}
public synchronized void onFinish(ITestContext context) {
System.out.println(("Test Suite is ending!"));
extent.flush();
test.remove();
}
public synchronized void onTestStart(ITestResult result) {
String methodName = result.getMethod().getMethodName();
String qualifiedName = result.getMethod().getQualifiedName();
int last = qualifiedName.lastIndexOf(".");
int mid = qualifiedName.substring(0,last).lastIndexOf(".");
String className = qualifiedName.substring(mid + 1,last);
System.out.println(methodName + " started!");
ExtentTest extentTest = extent.createTest(result.getMethod().getMethodName(),result.getMethod().getDescription());
extentTest.assignCategory(result.getTestContext().getSuite().getName());
extentTest.assignCategory(className);
test.set(extentTest);
test.get().getModel().setStartTime(getTime(result.getStartMillis()));
}
public synchronized void onTestSuccess(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " passed!"));
test.get().pass("Test passed");
test.get().getModel().setEndTime(getTime(result.getEndMillis()));
}
******FAILES******
public synchronized void onTestFailure(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " failed!"));
try {
test.get().fail(result.getThrowable(),--fail---------> MediaEntityBuilder.createScreenCaptureFromPath(getScreenshot()).build());
} catch (IOException e) {
System.err
.println("Exception thrown while updating test fail status " + Arrays.toString(e.getStackTrace()));
}
test.get().getModel().setEndTime(getTime(result.getEndMillis()));
}
public synchronized void onTestSkipped(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " skipped!"));
try {
test.get().skip(result.getThrowable(),MediaEntityBuilder.createScreenCaptureFromPath(getScreenshot()).build());
} catch (IOException e) {
System.err
.println("Exception thrown while updating test skip status " + Arrays.toString(e.getStackTrace()));
}
test.get().getModel().setEndTime(getTime(result.getEndMillis()));
}
public synchronized void onTestFailedButWithinSuccessPercentage(ITestResult result) {
System.out.println(("onTestFailedButWithinSuccessPercentage for " + result.getMethod().getMethodName()));
}
private Date getTime(long millis) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
}
****Base page****
public WebDriver driver;
public Properties prop;
public static boolean highlightElement;
public OptionsManager optionsManager;
By OpenForm = By.xpath("//button[@class='open-button']");
By JobcodeField = By.id("jobCode");
By DraftHTML = By.xpath("//input[@value='Draft HTML']");
By HideForm = By.xpath("//button[contains(text(),'Hide Form')]");
public static ThreadLocal<WebDriver> tldriver = new ThreadLocal<WebDriver>();
public static synchronized WebDriver getDriver() {
return tldriver.get();
}
public WebDriver init_driver(Properties prop) {
String browserName = null;
if (System.getProperty("browser") == null) {
browserName = prop.getProperty("browser");
} else {
browserName = System.getProperty("browser");
}
highlightElement = prop.getProperty("highlight").equals("yes") ? true : false;
System.out.println("Browser Launched:" + " " + browserName);
optionsManager = new OptionsManager(prop);
// public WebDriver init_driver(String browserName) {
// highlightElement = prop.getProperty("highlight").equals("yes") ? true : false;
// System.out.println("Browser Launched:" + " " + browserName);
// optionsManager = new OptionsManager(prop);
if (browserName.equals("chrome")) {
WebDriverManager.chromedriver().setup();
tldriver.set(new ChromeDriver(optionsManager.getChromeOptions()));
} else if (browserName.equals("firefox")) {
WebDriverManager.firefoxdriver().setup();
tldriver.set(new FirefoxDriver(optionsManager.getFirefoxOptions()));
} else if (browserName.equals("internetexplorer")) {
WebDriverManager.iedriver().setup();
tldriver.set(new InternetExplorerDriver(optionsManager.io));
} else {
System.out.println("Browser Name" + " " + browserName + "is not found");
}
getDriver().manage().deleteAllCookies();
getDriver().manage().window().maximize();
if(System.getProperty("url") == null) {
getDriver().get(prop.getProperty("url"));
}else {
getDriver().get(System.getProperty("url"));
}
return getDriver();
}
public Properties init_properties() {
prop = new Properties();
String path = null;
String env = null;
try {
env = System.getProperty("env");
if (env.equals("qa")) {
path = "./src/main/java/gov/gao/qa/config/qa.config.properties";
} else if (env.equals("dev")) {
path = "./src/main/java/gov/gao/qa/config/dev.config.properties";
} else if (env.equals("demo")) {
path = "./src/main/java/gov/gao/qa/config/demo.config.properties";
}
} catch (Exception e) {
path = "./src/main/java/gov/gao/qa/config/config.properties";
}
try {
FileInputStream ip = new FileInputStream(path);
prop.load(ip);
} catch (FileNotFoundException e) {
System.out.println("Configuration Propoeries Issue... correct config.properties file");
} catch (IOException e) {
e.printStackTrace();
}
return prop;
}
public String getScreenshot() {
File src = ((TakesScreenshot) getDriver()).getScreenshotAs(OutputType.FILE); <-----failes
String path = System.getProperty("user.dir") + "/screenshots/" + System.currentTimeMillis() +".png";
File destination = new File(path);
try {
FileUtils.copyFile(src,destination);
} catch (IOException e) {
System.out.println("screenshot captured failed...");
}
return path;
}
}
当我执行testRunner时,它给了我: 线程“主”中的异常java.lang.NullPointerException 在gov.gao.qa.base.BasePage.getScreenshot(BasePage.java:284) 在gov.gao.qa.listeners.ExtentReportListener.onTestFailure(ExtentReportListener.java:89)
ExtentReport是从网站复制的,对此我很陌生。请帮忙。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。