我在调整ExtentReports以提供所需的输出方面遇到了一些困难。
我有一个简单的TestNG测试框架,使用TestBase类来完成繁重的任务,以保持测试的简单性。我希望以一种简单的方式实现ExtentReports,使用TestNG ITestResult接口报告通过、失败和未知。
以下是示例测试,1个通过,1个故意失败:
public class BBCTest extends TestBase{
@Test
public void bbcHomepagePass() throws MalformedURLException {
assertThat(driver.getTitle(), (equalTo("BBC - Home")));
}
@Test
public void bbcHomePageFail() throws MalformedURLException {
assertThat(driver.getTitle(), (equalTo("BBC - Fail")));
}
protected WebDriver driver = null;
private Logger APPLICATION_LOGS = LoggerFactory.getLogger(getClass());
private static ExtentReports extent;
private static ExtentTest test;
private static ITestContext context;
private static String webSessionId;
@BeforeSuite
@Parameters({"env", "browser"})
public void beforeSuite(String env, String browser) {
String f = System.getProperty("user.dir") + "\\test-output\\FabrixExtentReport.html";
ExtentHtmlReporter h = new ExtentHtmlReporter(f);
extent = new ExtentReports();
extent.attachReporter(h);
extent.setSystemInfo("browser: ", browser);
extent.setSystemInfo("env: ", env);
}
@BeforeClass
@Parameters({"env", "browser", "login", "mode"})
public void initialiseTests(String env, String browser, String login, String mode) throws MalformedURLException {
EnvironmentConfiguration.populate(env);
WebDriverConfigBean webDriverConfig = aWebDriverConfig()
.withBrowser(browser)
.withDeploymentEnvironment(env)
.withSeleniumMode(mode);
driver = WebDriverManager.openBrowser(webDriverConfig, getClass());
String baseURL = EnvironmentConfiguration.getBaseURL();
String loginURL = EnvironmentConfiguration.getLoginURL();
APPLICATION_LOGS.debug("Will use baseURL " + baseURL);
switch (login) {
case "true":
visit(baseURL + loginURL);
break;
default:
visit(baseURL);
break;
}
driver.manage().deleteAllCookies();
}
@BeforeMethod
public final void beforeTests(Method method) throws InterruptedException {
test = extent.createTest(method.getName());
try {
waitForPageToLoad();
webSessionId = getWebSessionId();
} catch (NullPointerException e) {
APPLICATION_LOGS.error("could not get SessionID");
}
}
@AfterMethod
public void runAfterTest(ITestResult result) throws IOException {
switch (result.getStatus()) {
case ITestResult.FAILURE:
test.fail(result.getThrowable());
test.fail("Screenshot below: " + test.addScreenCaptureFromPath(takeScreenShot(result.getMethod().getMethodName())));
test.fail("WebSessionId: " + webSessionId);
break;
case ITestResult.SKIP:
test.skip(result.getThrowable());
break;
case ITestResult.SUCCESS:
test.pass("Passed");
break;
default:
break;
}
}
private String takeScreenShot(String methodName) {
String path = System.getProperty("user.dir") + "\\test-output\\" + methodName + ".jpg";
try {
File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshotFile, new File(path));
} catch (Exception e) {
APPLICATION_LOGS.error("Could not write screenshot" + e);
}
return path;
}
@AfterClass
public void tearDown() {
driver.quit();
}
@AfterSuite()
public void afterSuite() {
extent.flush();
}
3.0版
大部分代码都是由创建这个库的人提供的,我只是根据你的需要进行了修改。
public class TestBase {
private static ExtentReports extent;
private static ExtentTest test;
@BeforeSuite
public void runBeforeEverything() {
String f = System.getProperty("user.dir")+ "/test-output/MyExtentReport.html";
ExtentHtmlReporter h = new ExtentHtmlReporter(f);
extent = new ExtentReports();
extent.attachReporter(h);
}
@BeforeMethod
public void runBeforeTest(Method method) {
test = extent.createTest(method.getName());
}
@AfterMethod
public void runAfterTest(ITestResult result) {
switch (result.getStatus()) {
case ITestResult.FAILURE:
test.fail(result.getThrowable());
test.fail("Screenshot below: " + test.addScreenCaptureFromPath(takeScreenShot(result.getMethod().getMethodName())));
break;
case ITestResult.SKIP:
test.skip(result.getThrowable());
break;
case ITestResult.SUCCESS:
test.pass("Passed");
break;
default:
break;
}
extent.flush();
}
protected String takeScreenShot(String methodName) {
String path = "./screenshots/" + methodName + ".png";
try {
File screenshotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshotFile, new File(path));
} catch (Exception e) {
APPLICATION_LOGS.error("Could not write screenshot" + e);
}
return path;
}
}
问题内容: 你们中有谁知道针对测试失败和异常进行屏幕截图的可能解决方案? 我在其中添加了以下代码,但结果是它也会对通过的测试进行截图,因此它不是最佳解决方案: 我已经找到了这个主意:http: //yizeng.me/2014/02/08/take-a-screenshot-on-exception-with- selenium-csharp-eventfiringwebdriver/ ,可以使用
问题内容: 如何在Selenium + Python中捕获失败的测试用例的屏幕截图?我可以获取页面的屏幕截图,但是在捕获失败的测试用例的屏幕截图时会遇到困难。 码: 问题答案: 您可以像这样: 希望对您有帮助!
我使用的框架是使用cucumber、selenium、testng和maven构建的。 Maven仅适用于依赖项。 Testng使用AbstractTestNG CucumberTests执行cucumber功能文件。 我还使用extentreports testng适配器实现了扩展报告。看看我提到的这个链接——http://extentreports.com/docs/versions/4/ja
我正在使用MSpec使用硒网络驱动程序驱动一些自动化的用户界面测试。很像我在网上找到的例子。当测试失败时,我很难让它截图。 我在另一个问题上看到了一个评论,因为他们在示例Web规范中有一个。然而,在最新版本的Mspec(0.9.1)中似乎不存在。 在最新版本的mspec中,有没有其他方法可以做到这一点?最终,我将作为TeamCity工件生成HTML报告,并包含任何失败规范的屏幕截图。
一个“通过”测试但配置失败的示例。 失败的配置:@afterclass tearDown java.lang.assertionerror:java.lang.assertionerror:expected[true],但在)在org.testng.internal.MethodInvocationHelper.invokeMethodCommissioningTimeout(methodInvo
“通过”测试但配置失败的示例。 配置失败:@afterclass tearDown java.lang.assertionerror:java.lang.assertionerror:应为[true],但在org.testng.assert.fail(assert.java:96)在links.testarea.tearDown(Testarea.java:96)在sun.reflect.nati