t.me/atinfo_chat Telegram группа по автоматизации тестирования

Созадние тестов с использование PageFactory


(lily) #1

Поискала подобные проблемы на форумах -не нашла схожего. может упустила чего...

Есть тест написанный на 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;
   
    @Test
    public void testUntitled() throws Exception {
        homePage.open();
        loginPage = homePage.loginAs();
        clientPage = loginPage.loginUser(admin);
        orderPage = clientPage.ordersPage();
        homePage = orderPage.home();

       }

}

нигде по тесту не использую ObjectFactoryImpl

debug показывает, что ошибка в строке

private LoginPage loginPage = PageFactory.initElements(getWebDriver(),LoginPage.class);

не нравится PageFactory.initElements: убираю эту строчку и тест запускается.

может что-то не то создала?


(Mykhailo Poliarush) #2

в ошибке сказано, что проблема в test.BasicTestCase.getWebDriver, покажи реализацию, плиз

private LoginPage loginPage = PageFactory.initElements(getWebDriver(),LoginPage.class); - с этим все верно


(lily) #3

попытки поэкспериментировать дали в конце концов все то же самое.вот текст ошибки

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")) {
            
            // RUN Firefox
            FirefoxProfile profile = new FirefoxProfile();
            try {
                profile.addExtension(new File("lib/firebug-1.9.1-fx.xpi"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            profile.setPreference("extensions.firebug.showFirstRunPage", false);
            profile.setPreference("webdriver.load.strategy","unstable");
            profile.setEnableNativeEvents(false);
         
            driver = new FirefoxDriver(profile);
        } else if (browser.startsWith("ie")) {
            driver = new InternetExplorerDriver();
        } else {
            driver = new HtmlUnitDriver(true);
        }
      driver.manage().timeouts().implicitlyWait(Long.parseLong(ConfigProperties.getProperty("imp.wait")), TimeUnit.SECONDS);
        return driver;
    }
    @AfterSuite(alwaysRun = true)
    public void tearDown() throws Exception {
        driver.close();
    }
   }


(Mykhailo Poliarush) #4

А какой браузер вы запускаете? и где в этом файле 26 строка?

Я думаю, проблема в настройке профиля, потому вместо 

      // RUN Firefox
            FirefoxProfile profile = new FirefoxProfile();
            try {
                profile.addExtension(new File("lib/firebug-1.9.1-fx.xpi"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            profile.setPreference("extensions.firebug.showFirstRunPage", false);
            profile.setPreference("webdriver.load.strategy","unstable");
            profile.setEnableNativeEvents(false);
         
            driver = new FirefoxDriver(profile);

сделайте просто вот так и посмотреть, что все работает

            driver = new FirefoxDriver();


(lily) #5

сорри , без нумерации вставила.

26:           String browser = ConfigProperties.getProperty("browser");

Браузер Firefox.

"

сделайте просто вот так и посмотреть, что все работает

            driver = new FirefoxDriver();" -сделала. ошибки все теже самые.


(Mykhailo Poliarush) #6

26:           String browser = ConfigProperties.getProperty("browser");

это класс, который читает конфиги (проперти) с файла, проверьте, чтобы

1. в классе ConfigProperties была обработка ситуаций, когда такой параметр в конфигах не задан

2. проверьте, чтобы в конфиге был указан указан браузер, на котором вы хотите запускать тесты.

 

а лучше всего сделать (в целях обучения) , самый простой тест на PageFactory, а потом уже добавлять остальные вспомогательные файлы и классы, которые вам необходимы.

если у вас не получиться решить проблему, выложите проект сюда http://www.ex.ua/, чтобы можно было на него посмотреть

 


(lily) #7

Вроде бы п.1 и 2 выполнены, но что-то все равно не так.

ссылка для скачивания архива теста http://webfile.ru/5936075 пароль : devlogin (на ex.ua ошибка формата файла, архив-zip)

к сожалению, в config.property не откроется базовый URL т.к  он доступен только на локальной машине

 

спасибо


(Mykhailo Poliarush) #8

в коде проблем нету

я так понимаю, что вы запускаете через eclipse

в данном случае, строка URL props = ClassLoader.getSystemResource("config.properties"); говорит о том, чтобы загружать проперти через classpath и похоже, что вашего файла там просто нет.

в eclipse, вам надо сделать Project -> Properties -> Java Build Path -> Add Class Folder и добавить вашу папку, где лежит config.properties


(lily) #9

спасибо большое!!! Запускаю черех Eclipse. с вашей помощью одной ошибкой стало меньше. но где-то в коде не вяжется -не указано откуда стартовать.

если правильно понимаю, то в BaseTest необходимо сослаться на url, с которого идет старт  ?

у меня этот url прописан в config.properties: login.url = http://localhost:88/staging.ph.com/

т.е  должна быть строка в BaseTest вроде driver.navigate().to(ConfigProperties.getProperty("login.url")) ? (не совсем уверена что именно так должен выглядеть метод открытия url)

 

Спасибо!


(lily) #10

спасибо огромное за помощь!

попробывала вписать строчку подобную и все пошло:))

тему не буду закрывать -на случай если вопросы появятся  еще:)


(Mykhailo Poliarush) #11

рад, что у вас все получилось

 


(Hohner) #12

Добрый день.

Не хотел создавать новую тему, поэтому разрешите написать здесь.

Был написан пробный тест с использованием PageFactory. Прект успешно запускался/выполнялся пару недель на Jenkins. Сегодня прверил build -- сборка длится порядка 7 часов и не закончена. Просмотрел вывод в консоль, имееем

[testng] [TestNG] [ERROR]
   [testng] Cannot instantiate class tests.LoginTest
   [testng] The tests failed.

Совершенно непонятно в чем дело. Никаких обновлений софта или изменений в проекте не было. В чем возможная причина?

Всем спасибо.


(Mykhailo Poliarush) #13

а где ваши тесты запускались? на удаленной машине?

просто когда сборка висит 7 часов и не закончена, это скорее всего произошла какая-то ошибка на сервере или heap space или еще что-то

но процесс не закрылся, при этом это дженкинс ожидает ответа

надо пойти на машину на которой запускаются тесты и посмотреть там процессы,

и если действительно там есть процесс java, который запускал тест, то нужно будет его убить, 

далее оборвать выполнение самого билда и перезапустить снова


(rpwheeler) #14

Посоветую проверить статус Jenkins: у рядом работающей команды вчера были большие проблемы из-за обновления именно Jenkins.


(Hohner) #15

Запуск происходил на локальной машине. Я остановил незавершенную сборку и начал новую, но результат то же самый. Попробую посмотреть обновления Jenkins. Я ничего не обновлял, но, вероятно, он фоново подтянул какие-то обновления.


(Hohner) #16

Прошу прощения.

Невнимательно смотрел утром. Причина очень банальна -- изменился UI, т.е. необходимо переписать тест.


(Mykhailo Poliarush) #17

ну что бывает :)