当前位置: 首页 > 知识库问答 >
问题:

Selenium Web驱动程序--TestNG报告中未捕获故障截图

富锦
2023-03-14

用下面的代码,如果测试用例通过,截图捕获成功并显示在报告中,但是当测试失败时,截图不显示,甚至截图超链接也不显示在报告中。谁能解决代码中的错误呢?

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");
      }

}

共有1个答案

晏炳
2023-03-14

未调用onTestFailure方法,因为未为测试类指定侦听器。@Listeners注释中缺少一个值。应该是像

@Listeners({CountryChoserLayer.class})

您可以在官方的TestNG文档中找到更多指定侦听器的方法。

在onTestFailure方法中尝试截图时,您可能遇到的另一个问题是NullPointerException。最简单的解决方法是将driver字段的声明更改为Static。我用这些修正运行代码,我得到了带有截图的报告。

 类似资料:
  • 背景: null > @test(groups={“init”})public void openURL() 包含用于启动webdriver并使用给定URL打开chrome>实例的webdriver代码。 @test(dependsonGroups={“init”})public void testLogin() 包含的webdriver代码指向: 1。找到用户名密码文本输入元素,从属性文件中输入

  • 问题内容: 目前,我正在以这种方式拍摄测试失败的屏幕截图: 我可以将自己的屏幕截图包含在TestNG报告链接或图片中吗?如果是,怎么办? 我在网上发现的只是FEST框架。但是由于我已经在截屏了,所以我不想使用其他框架。 问题答案: 是的,您可以在testng报告中包含指向屏幕截图的链接。 您需要通过使用@Listeners({yourListener.class})注释您的测试类或所有测试类的父级

  • 我将使用诱惑报告来监控硒测试结果。我正在使用TestNG和Maven failsafe插件来运行测试。我找到了非常清晰的例子来修改pom。xml,以便在您使用Maven surefire插件时包含case的诱惑,但对Maven failsafe插件则没有。我假设配置应该非常相似,但它不适合我。这是我pom里的东西。xml: 这是我看到的错误: 任何建议都将不胜感激。我假设配置Maven故障保护插件

  • 问题内容: 我试图单击此页面上的元素: 在这一点上,我想单击“现金流量”,“资产负债表”或“季度”。我知道这些按钮已加载,因为我可以使用BeautifulSoup从页面源中提取它们。但是,当我尝试使用Selenium时: 全部返回“无法定位元素”,除了“季度”返回一个元素,但它位于图上方的一个元素而不是我感兴趣的表格上方的一个元素。 我认为这是由于位于错误的iframe中,而我找到了所有ifram

  • null 如果滚动7,则该玩家获胜 如果滚动与之前相同的和,则该玩家输 如果没有,则播放器再次滚动,直到满足这两个条件中的任何一个。 最后,它计算出获胜游戏的百分比。我的问题是,我应该得到一个百分比的游戏赢得约39%-60%,根据一个同事,但每次我运行程序,我得到约20%,我不明白为什么。我做错什么了吗?谁能帮帮我吗? 掷7有6种可能的方法,掷11有两种可能的方法。 第一次掷骰子共有8种可能的方法