2013-06-09 2 views
3

С приведенным ниже кодом, если тестовый сценарий успешно снят и отображен в отчете. Если тест не выполнен - ​​скриншот не отображается. гиперссылка на скриншот не отображается в отчете. Любой может разобраться с ошибкой в ​​коде?Веб-драйвер Selenium - Скриншот сбоя не записывается в отчете TestNG

package listeners; 

import java.io.File; 
import java.io.IOException; 

import java.text.Format; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import org.apache.commons.io.FileUtils; 
import org.openqa.selenium.By; 
import org.openqa.selenium.OutputType; 
import org.openqa.selenium.TakesScreenshot; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver;  
import org.testng.ITestResult; 
import org.testng.Reporter; 
import org.testng.annotations.Listeners; 
import org.testng.annotations.Test; 
import org.testng.ITestResult; 
import org.testng.Reporter; 
import org.testng.TestListenerAdapter; 
import java.util.logging.Logger; 


@Listeners 

public class CountryChoserLayer extends TestListenerAdapter { 


    @Test(priority=1) 
    public void choseCountry() throws Exception{ 

     driver.findElement(By.id("intselect")).sendKeys("India"); 
     driver.findElement(By.xpath(".//*[@id='countryChooser']/a/img")).click(); 
     //window.onbeforeunload = null; 
     Date date=new Date(); 
     Format formatter = new SimpleDateFormat("yyyy-MM-dd_hh-mm-ss");   
     File scrnsht = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
     String NewFileNamePath=("C://Documents and Settings//vlakshm//workspace//MyTNG//test-output//Screenshots"+"//SearsINTL_"+ formatter.format(date)+".png"); 
     FileUtils.copyFile(scrnsht, new File(NewFileNamePath)); 
     System.out.println(NewFileNamePath); 
     Reporter.log("<a href=\"" + NewFileNamePath + "\">Passed Screenshot</a>"); 
     System.out.println("---------------------------------------"); 
     System.out.println("Country choser layer test case-Success"); 
     System.out.println("---------------------------------------"); 

    } 


    public String baseurl="http://www.sears.com/shc/s/CountryChooserView?storeId=10153&catalogId=12605"; 
    public WebDriver driver; 
    public int Count = 0; 

    @Test(priority=0) 
    public void openBrowser() { 

     driver = new FirefoxDriver(); 
     driver.manage().deleteAllCookies(); 
     driver.get(baseurl); 
    } 
    @Test(priority=2) 
    public void closeBrowser() { 
    driver.quit(); 
    } 

@Override 
public void onTestFailure(ITestResult result){ 

    Reporter.log("Fail"); 
    System.out.println("BBB"); 
    //Reporter.setCurrentTestResult(result);  
     Date date=new Date(); 
     Format formatter = new SimpleDateFormat("yyyy-MM-dd_hh-mm-ss");  


     File scrnsht = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
     //File scrFile = ((TakesScreenshot) WebDriver.globalDriverInstance).getScreenshotAs(OutputType.FILE); 
     String NewFileNamePath=("C://Documents and Settings//vlakshm//workspace//MyTNG//test-output//Screenshots"+"//SearsINTL_"+ formatter.format(date)+".png"); 
     //System.out.println("AAA" + NewFileNamePath); 
     try { 
      //System.out.println("CCC"); 
     FileUtils.copyFile(scrnsht,new File(NewFileNamePath)); 
      System.out.println(NewFileNamePath); 


    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     System.out.println("DDD"); 
     e.printStackTrace(); 
    } 
     Reporter.log("<a href=\"" + NewFileNamePath + "\">Failed Screenshot</a>"); 
     Reporter.setCurrentTestResult(null); 
    System.out.println("---------------------------------------"); 
    System.out.println("Country choser layer test case Failed"); 
    System.out.println("---------------------------------------"); 

     } 

     @Override 
     public void onTestSkipped(ITestResult result) { 
     // will be called after test will be skipped 
     Reporter.log("Skip"); 
     } 
     @Override 
     public void onTestSuccess(ITestResult result) { 
     // will be called after test will pass 
     Reporter.log("Pass"); 
     } 

} 

ответ

2

Ваш метод onTestFailure не вызывается, потому что вы не указали прослушиватель для вашего тестового класса. Вы не указали значение в аннотации @Listeners. Это должно быть что-то вроде

@Listeners({CountryChoserLayer.class}) 

Вы можете найти больше способов определения слушателя в official TestNg's documentation.

Другой проблемой, с которой вы столкнулись, является исключение NullPointerException при попытке сделать снимок экрана в методе onTestFailure. Простейшим обходным решением для этого было бы изменение объявления поля драйвера в статическом. Я запускаю код с этими исправлениями, и я получил отчет со снимком экрана.

Я должен добавить, что, по моему мнению, применение методов теста и слушателя в одном классе не является хорошей практикой.

+0

вы можете попробовать этот проект - https://github.com/yev/seleniumMvnScreenshot. Добавив аннотацию ** @ org.testng.annotations.Listeners (FailTestScreenshotListener.class) ** к вашим испытаниям селена, вы автоматически получите скриншот в своей целевой папке maven – Yev

Смежные вопросы