У меня возникла проблема при параллельном тестировании при захвате снимков экрана с использованием прослушивателей TestNG.
Если я запускаю веб-драйвер STATIC , мои тесты, похоже, посылают неверные данные друг другу, нокажется, что слушатель работает ....
Когда я запускаю веб-драйвер NON STATIC , все потоки работают правильно параллельно, но я получаю исключение NullPointException для файла слушателя.
Есть ли способ обойти это ??Я смотрел на запуск потока как на потокобезопасный или локальный поток, но не уверен, что реализую его правильно
Вот мой код для моего Базового класса
BASEREMOTEPARALLEL2.java
package resources;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.io.FileHandler;
public class baseRemoteParallel2 {
public WebDriver driver;
public WebDriver initialiseDriver(String browser) throws IOException {
if (browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver",
"C:\\Users\\Documents\\Webdriver_Plugins\\chromedriver.exe");
driver = new ChromeDriver();
} else if (browser.equals("firefox")) {
System.setProperty("webdriver.gecko.driver",
"C:\\Users\\Documents\\Webdriver_Plugins\\geckodriver.exe");
driver = new FirefoxDriver();
} else if (browser.equals("ie")) {
System.setProperty("webdriver.ie.driver",
"C:\\Users\\Documents\\Webdriver_Plugins\\IEDriverServer.exe");
driver = new InternetExplorerDriver();
}
// Set GLOBAL timeout to 5 seconds
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
return driver;
}
public void getScreenshotPassed(String result) throws IOException {
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileHandler.copy(src,
new File("C:\\Users\\Documents\\Automated_screenshots\\PASSED\\Testname - " + result + ".png"));
}
public void getScreenshotFailed(String result) throws IOException {
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileHandler.copy(src,
new File("C:\\Users\\Documents\\Automated_screenshots\\FAILED\\Testname - " + result + ".png"));
}
}
Это код в моем Listener.java
package resources;
import java.io.IOException;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class listeners implements ITestListener {
baseRemoteParallel2 b = new baseRemoteParallel2();
public void onTestStart(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
try {
b.getScreenshotPassed(result.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onTestFailure(ITestResult result) {
// TODO Auto-generated method stub
try {
b.getScreenshotFailed(result.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onTestSkipped(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub
}
public void onStart(ITestContext context) {
// TODO Auto-generated method stub
}
public void onFinish(ITestContext context) {
// TODO Auto-generated method stub
}
}
Ошибка.
java.lang.NullPointerException
at resources.baseRemoteParallel.getScreenshotPassed(baseRemoteParallel.java:101)
at resources.listeners.onTestSuccess(listeners.java:24)
at org.testng.internal.TestListenerHelper.runTestListeners(TestListenerHelper.java:70)
at org.testng.internal.Invoker.runTestListeners(Invoker.java:1389)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:636)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.access$000(SuiteRunner.java:40)
at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:489)
at org.testng.internal.thread.ThreadUtil$1.call(ThreadUtil.java:52)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Строка 101 в моем коде:это.
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);