我有一个通过从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();
}
}
答案 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)