我有一个具有以下结构的测试类(使用 Selenium、TestNG、JAVA):
public class loggedTest {
@Test
@Test
@AfterMethod
public void tearDown(messages screen, ITestResult result) {
screen.screenshot(result);
}
在 AfterMethod 中,如果测试失败,我想截屏。 这是在单独的类中制作屏幕截图的方法:
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());
}
}
}
这里的问题在哪里? 谢谢
最佳答案
为什么 .screenshot()
函数在一个名为 messages
的类中?它似乎不应该属于那里,或者 messages
应该重命名。
解决这个问题的一种方法是创建一个 Utils
类,使其成为 static
,然后将 .screenshot()
函数放入在那里并像 .tearDown()
中的 Utils.screenshot()
一样调用它。
关于java - Selenium:如何从另一个类调用方法(截图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41002113/