如何在侦听器类中获取驱动程序实例

时间:2019-03-19 07:49:06

标签: selenium selenium-webdriver testng listener

我有一个通过从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 在基类中声明。

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

2 个答案:

答案 0 :(得分:2)

通过在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();
    }
  }
}

Testng文件:

<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>

答案 1 :(得分:1)

快速解答

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

enter image description here

enter image description here

enter image description here