如何在侦听器中获取驱动程序实例 class
How get driver instance in listener class
我有一个测试 class,它通过从 TestNG 文件中获取驱动程序参数来运行。这是框架的流程。
<parameter name="browser" value="chrome"/>
已在 TestNG 文件中提供。
这被 logintest class 使用。
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 class.
中声明
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 }
现在,我如何实现侦听器 class 以便在失败时截取屏幕截图?这就是我尝试的方式,但我不知道如何从我的 logintest class.
中获取驱动程序实例
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();
}
}
您可以在测试 class 中应用侦听器 class 方法,方法是在您的测试 class.
中添加 <listener>
参数
所以,假设你写 onTestFailure(ITestResult result)
的 class 名称是 ListenerClass
而这个 class 正在实现 ITestListener
,所以在在这种情况下,您只需要在 testng 文件中提及侦听器 class 名称,它就会将您的侦听器 class 中提到的所有方法应用到您的测试 class 中。
实现类似于:
监听器Class:
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>
快答
您需要在TestNG.xml中添加监听器标签。请看下面的截图以供参考。
在 Listners class 中,我们得到具有 ItestResult 的任何对象的实例,如下所示
内部监听器class我们在 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)
}
我有一个测试 class,它通过从 TestNG 文件中获取驱动程序参数来运行。这是框架的流程。
<parameter name="browser" value="chrome"/>
已在 TestNG 文件中提供。
这被 logintest class 使用。
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 class.
中声明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 }
现在,我如何实现侦听器 class 以便在失败时截取屏幕截图?这就是我尝试的方式,但我不知道如何从我的 logintest class.
中获取驱动程序实例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();
}
}
您可以在测试 class 中应用侦听器 class 方法,方法是在您的测试 class.
中添加<listener>
参数
所以,假设你写 onTestFailure(ITestResult result)
的 class 名称是 ListenerClass
而这个 class 正在实现 ITestListener
,所以在在这种情况下,您只需要在 testng 文件中提及侦听器 class 名称,它就会将您的侦听器 class 中提到的所有方法应用到您的测试 class 中。
实现类似于:
监听器Class:
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>
快答
您需要在TestNG.xml中添加监听器标签。请看下面的截图以供参考。
在 Listners class 中,我们得到具有 ItestResult 的任何对象的实例,如下所示
内部监听器class我们在 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)
}