try*_*an3 3 parallel-processing testng selenium screenshot webdriver
我目前正在通过分别覆盖TestTistenerAdapter方法onTestFailure和onTestSuccess来捕获有关TestNG失败和成功的屏幕截图.为此,您需要指定要截取屏幕截图的驱动程序.
我的问题:在方法级别并行运行测试时,是否有一种捕获屏幕截图的好方法?
为了并行运行测试,每个单独的测试都需要一个唯一的驱动程序实例.因此,在任何给定时间,您都有x个驱动程序实例在运行.在捕获屏幕截图时,您如何确定使用哪个驱动程序?
代码摘录如下:
public class OnFailureListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult tr) {
Screenshots.captureScreenshot(tr);
super.onTestFailure(tr);
}
Run Code Online (Sandbox Code Playgroud)
-
public static void captureScreenshot(ITestResult tr) {
WebDriver driver = TestClass.driver;
if (driver instanceof TakesScreenshot) {
String filename = "path/to/screenshot/file";
try {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(filename));
} catch (IOException e) { e.printStackTrace(); }
}
Run Code Online (Sandbox Code Playgroud)
如果您创建一个可以访问驱动程序的基本测试类,那么该驱动程序将始终是正确的驱动程序
以下将实现这一目标;
public asbtract baseTestCase() {
private WebDriver driver;
public WebDriver getDriver() {
return driver;
}
@BeforeMethod
public void createDriver() {
driver=XXXXDriver();
}
@AfterMethod
public void tearDownDriver() {
if (driver != null){
try{
driver.quit();
}
catch (WebDriverException e) {
System.out.println("***** CAUGHT EXCEPTION IN DRIVER TEARDOWN *****");
System.out.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class ScreenshotListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result){
Object currentClass = result.getInstance();
WebDriver webDriver = ((BaseTest) currentClass).getDriver();
if (webDriver != null){
File f = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
//etc.
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4090 次 |
| 最近记录: |