【问题标题】:How get driver instance in listener class如何在侦听器类中获取驱动程序实例
【发布时间】:2019-03-19 07:49:05
【问题描述】:

我有一个通过从 TestNG 文件获取驱动程序参数来运行的测试类。这是框架的流程。

<parameter name="browser" value="chrome"/> 在 TestNG 文件中提供。

这由 logintest 类使用。

public class LoginLogoutTest extends Base{
  @Test
  @Parameters("browser")
  public void initializeBrowser(String browser) throws IOException{
      super.initializeBrowser(browser);
      driver.get("https://www.google.com")
      Assert.assertEquals(xpath_to_get_header, "Invalid_header_name");
  }

initializeBrowser 在 Base 类中声明。

public class Base {
public WebDriver driver;

public void initializeBrowser(String browser) throws IOException {
    if (browser.equalsIgnoreCase("chrome")) {
        System.setProperty("webdriver.chrome.driver", currentDir + "\\src\\main\\java\\resources\\chromedriver.exe");
        driver = new ChromeDriver();
    } 
     else { //do something }

现在,我如何实现侦听器类以便在失败时截取屏幕截图?这就是我尝试过的方法,但我不知道如何从我的 logintest 类中获取驱动程序实例。

public void onTestFailure(ITestResult result) {
    File Src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    try {
        FileUtils.copyFile(Src, new File("C://test//" + result + "screen.jpg"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

【问题讨论】:

    标签: selenium selenium-webdriver testng listener


    【解决方案1】:

    您可以通过在 testng 类中添加 <listener> 参数来将侦听器类方法应用于您的测试类。

    因此,假设您编写onTestFailure(ITestResult result) 的类名是ListenerClass,而这个类正在实现ITestListener,所以在这种情况下,您只需在 testng 文件中提及侦听器类名并它会将您的侦听器类中提到的所有方法应用于您的测试类。

    实现类似于:

    监听类:

    public class ListenerClass implements ITestListener{
    
    @Override
    public void onTestFailure(ITestResult result) {
    File Src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    try {
        FileUtils.copyFile(Src, new File("C://test//" + result + "screen.jpg"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
      }
    }
    

    测试文件:

    <suite name="TestSuite" parallel="tests" preserve-order="true">
    
    <listeners>
        <listener class-name="packageName.ListenerClass"></listener> (Add your listener class path here)
    </listeners>
    
        <test name="Testing" preserve-order="true">
        <classes>
            <class name="packageName.LoginLogoutTest"/> (Add your test class path here)
        </classes>
    </test>
    

    【讨论】:

      【解决方案2】:

      快速回答

      您需要在 TestNG.xml 中添加监听器标签。请看下面的截图以供参考

      【讨论】:

        【解决方案3】:

        在 Listners 类中,我们得到任何具有 ItestResult 的对象的实例,如下所示

        在监听器类中,我们对 onTestfailure 采取行动

        public coid onTestfailure(ItestResult result){
            
         Webdriver driver; 
        
        driver=(WebDriver)result.getTestClass().getRealClass().getDeclaredField("driver").get(result.getInatnce())
        
        //method from your utility class
        
        getScrrensot(result.getMethod().getMethodName(),driver)
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-18
          • 1970-01-01
          • 2017-07-17
          • 2019-12-02
          • 2017-11-15
          • 1970-01-01
          • 1970-01-01
          • 2014-09-24
          相关资源
          最近更新 更多