Поискала подобные проблемы на форумах -не нашла схожего. может упустила чего...
Есть тест написанный на Java с использованием PageFactory. При попытке запустить тест выдается ошибка подобного рода:
Cannot instantiate class test.LoginTest at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:38) Caused by: java.lang.ExceptionInInitializerError at test.BasicTestCase.getWebDriver(BasicTestCase.java:26) at test.LoginTest.<init>(LoginTest.java:25) ... 26 more Caused by: java.lang.NullPointerException at utils.ConfigProperties.<clinit>(ConfigProperties.java:15) ... 28 more
код самого теста :
....
public class LoginTest extends BasicTestCase { private LoginPage loginPage = PageFactory.initElements(getWebDriver(),LoginPage.class); private HomePage homePage; private ClientPage clientPage; private OrdersPage orderPage;
попытки поэкспериментировать дали в конце концов все то же самое.вот текст ошибки
org.testng.TestNGException: Cannot instantiate class test.LoginTest at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:38) at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:387) at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:299) at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:110) at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:195) at org.testng.internal.TestNGClassFinder.<init>(TestNGClassFinder.java:120) at org.testng.TestRunner.initMethods(TestRunner.java:409) at org.testng.TestRunner.init(TestRunner.java:235) at org.testng.TestRunner.init(TestRunner.java:205) at org.testng.TestRunner.<init>(TestRunner.java:160) at org.testng.remote.RemoteTestNG$1.newTestRunner(RemoteTestNG.java:139) at org.testng.remote.RemoteTestNG$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG.java:269) at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:561) at org.testng.SuiteRunner.init(SuiteRunner.java:157) at org.testng.SuiteRunner.<init>(SuiteRunner.java:111) at org.testng.TestNG.createSuiteRunner(TestNG.java:1260) at org.testng.TestNG.createSuiteRunners(TestNG.java:1247) at org.testng.TestNG.runSuitesLocally(TestNG.java:1101) at org.testng.TestNG.run(TestNG.java:1022) at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29) ... 21 more Caused by: java.lang.ExceptionInInitializerError at test.BasicTestCase.getWebDriver(BasicTestCase.java:26) at test.LoginTest.<init>(LoginTest.java:25) ... 26 more Caused by: java.lang.NullPointerException at utils.ConfigProperties.<clinit>(ConfigProperties.java:15) ... 28 more
Вот реализация BasicTestCase:
public class BasicTestCase { protected static WebDriver driver;
public UserData admin = new UserData("ffff@fff.ff", "1");
protected WebDriver getWebDriver() { if (driver != null) { return driver; } String browser = ConfigProperties.getProperty("browser"); if (browser.equals("firefox")) {
это класс, который читает конфиги (проперти) с файла, проверьте, чтобы
1. в классе ConfigProperties была обработка ситуаций, когда такой параметр в конфигах не задан
2. проверьте, чтобы в конфиге был указан указан браузер, на котором вы хотите запускать тесты.
а лучше всего сделать (в целях обучения) , самый простой тест на PageFactory, а потом уже добавлять остальные вспомогательные файлы и классы, которые вам необходимы.
если у вас не получиться решить проблему, выложите проект сюда http://www.ex.ua/, чтобы можно было на него посмотреть
в данном случае, строка URL props = ClassLoader.getSystemResource("config.properties"); говорит о том, чтобы загружать проперти через classpath и похоже, что вашего файла там просто нет.
в eclipse, вам надо сделать Project -> Properties -> Java Build Path -> Add Class Folder и добавить вашу папку, где лежит config.properties
спасибо большое!!! Запускаю черех Eclipse. с вашей помощью одной ошибкой стало меньше. но где-то в коде не вяжется -не указано откуда стартовать.
если правильно понимаю, то в BaseTest необходимо сослаться на url, с которого идет старт ?
у меня этот url прописан в config.properties: login.url = http://localhost:88/staging.ph.com/
т.е должна быть строка в BaseTest вроде driver.navigate().to(ConfigProperties.getProperty("login.url")) ? (не совсем уверена что именно так должен выглядеть метод открытия url)
Не хотел создавать новую тему, поэтому разрешите написать здесь.
Был написан пробный тест с использованием PageFactory. Прект успешно запускался/выполнялся пару недель на Jenkins. Сегодня прверил build -- сборка длится порядка 7 часов и не закончена. Просмотрел вывод в консоль, имееем
[testng] [TestNG] [ERROR] [testng] Cannot instantiate class tests.LoginTest [testng] The tests failed.
Совершенно непонятно в чем дело. Никаких обновлений софта или изменений в проекте не было. В чем возможная причина?
Запуск происходил на локальной машине. Я остановил незавершенную сборку и начал новую, но результат то же самый. Попробую посмотреть обновления Jenkins. Я ничего не обновлял, но, вероятно, он фоново подтянул какие-то обновления.