我有一个带有测试的课程(使用Selenium,TestNG,JAVA),结构如下:
public class messages {
public void screenshot(ITestResult result) {
//driver = new ChromeDriver();
if (ITestResult.FAILURE == result.getStatus()) {
try {
TakesScreenshot ts = (TakesScreenshot) driver;
File source = ts.getScreenshotAs(OutputType.FILE);
Date date = new Date();
FileUtils.copyFile(source, new File("./Screenshots/" + result.getInstanceName() + "." + result.getName() + "." + date + ".png"));
System.out.println("Screenshot taken");
} catch (Exception e) {
System.out.println("Exception while taking screenshot " + e.getMessage());
}
}
}
}
在AfterMethod中我想在测试失败时制作截图。 以下是在单独的类中进行屏幕截图的方法:
@AfterMethod
public void tearDown(ITestResult result) {
if (ITestResult.FAILURE == result.getStatus()) {
try {
TakesScreenshot ts = (TakesScreenshot) driver;
File source = ts.getScreenshotAs(OutputType.FILE);
Date date = new Date();
FileUtils.copyFile(source, new File("./Screenshots/" + result.getInstanceName() + "." + result.getName() + "." + date + ".png"));
System.out.println("Screenshot taken");
} catch (Exception e) {
System.out.println("Exception while taking screenshot " + e.getMessage());
}
}
}
我正在运行测试,但它不起作用,如果此方法在其他类中。
但是如果我把它正确地放到@AfterMethod注释中,它正在工作,就像那样:
$ext = strstr($filename, '.');
这里的问题在哪里? 感谢
答案 0 :(得分:2)
为什么名为.screenshot()
的类中的messages
函数?它似乎不属于那里或者messages
应该重命名。
解决此问题的一种方法是创建一个Utils
类,将其设为static
,然后将.screenshot()
函数放入其中,并将其称为Utils.screenshot()
来自.tearDown()
{1}}。
答案 1 :(得分:1)
很少 -
改进编写班级名称
loggedTest
- > LoggedTest
messages
- > Messages
(如提及的那样)
您无需将Messages
的实例传递给tearDown()
,而是将screenshot
方法调用为 -
@AfterMethod
public void tearDown(ITestResult result) {
new Messages().screenshot(result);
}
Messages
班级了解现有driver
的内容。除非你最终创造一个新的驱动程序和做事荒谬。建议 - 您可以在静态上下文中传递driver
的实例,或者在那里使用超类。