Selenide Failed to create new instance of class

page-object
testng
selenide
allure
Теги: #<Tag:0x00007f7b64b32248> #<Tag:0x00007f7b64b320e0> #<Tag:0x00007f7b64b31f50> #<Tag:0x00007f7b64b31e10>

(Владимир Козыцький) #1

Добрый день, начинаю строить тестовый фреймворк дерево проекта
42%20PM

описание страниц:


степы:

BaseTest:

тестовый класс:

и столкнулся с следующей проблемой что при инициализации объекта в тестовом методе все работает, но я не хочу в каждом тесте создавать экземпляр класса Степс,
если же выношу инициализацию объекта на уровень тестового класса получаю ексепшн

SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
org.testng.TestNGException: 
Cannot instantiate class signin.TestSignIn
	at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:30)
	at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:423)
	at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:336)
	at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125)
	at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:190)
	at org.testng.TestClass.getInstances(TestClass.java:95)
	at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:81)
	at org.testng.TestClass.init(TestClass.java:73)
	at org.testng.TestClass.<init>(TestClass.java:38)
	at org.testng.TestRunner.initMethods(TestRunner.java:389)
	at org.testng.TestRunner.init(TestRunner.java:271)
	at org.testng.TestRunner.init(TestRunner.java:241)
	at org.testng.TestRunner.<init>(TestRunner.java:167)
	at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:663)
	at org.testng.SuiteRunner.init(SuiteRunner.java:260)
	at org.testng.SuiteRunner.<init>(SuiteRunner.java:198)
	at org.testng.TestNG.createSuiteRunner(TestNG.java:1295)
	at org.testng.TestNG.createSuiteRunners(TestNG.java:1273)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1128)
	at org.testng.TestNG.runSuites(TestNG.java:1049)
	at org.testng.TestNG.run(TestNG.java:1017)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:24)
	... 22 more
Caused by: java.lang.RuntimeException: Failed to create new instance of class pages.SignInPage
	at com.codeborne.selenide.impl.SelenidePageFactory.page(SelenidePageFactory.java:22)
	at com.codeborne.selenide.SelenideDriver.page(SelenideDriver.java:102)
	at com.codeborne.selenide.Selenide.page(Selenide.java:554)
	at steps.SignInSteps.<init>(SignInSteps.java:12)
	at signin.TestSignIn.<init>(TestSignIn.java:17)
	... 27 more
Caused by: java.lang.IllegalStateException: No webdriver is bound to current thread: 1. You need to call open(url) first.
	at com.codeborne.selenide.drivercommands.LazyDriver.getWebDriver(LazyDriver.java:67)
	at com.codeborne.selenide.impl.SelenidePageFactory.page(SelenidePageFactory.java:27)
	at com.codeborne.selenide.impl.SelenidePageFactory.page(SelenidePageFactory.java:19)
	... 31 more

Process finished with exit code 255
Empty test suite.

<properties>
        <aspectj.version>1.8.10</aspectj.version>
        <maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
        <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
        <allure-maven.version>2.9</allure-maven.version>
        <allure-testng.version>2.8.1</allure-testng.version>
        <testng.version>6.14.3</testng.version>
        <allure-selenide.version>2.8.1</allure-selenide.version>
        <selenide.version>5.0.1</selenide.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>


    <build>
        <resources>
            <resource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                    <argLine>
                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                    </argLine>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-maven</artifactId>
                <version>${allure-maven.version}</version>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <dependency>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-testng</artifactId>
            <version>${allure-testng.version}</version>
        </dependency>


        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-selenide</artifactId>
            <version>${allure-selenide.version}</version>
        </dependency>

        <dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide</artifactId>
            <version>${selenide.version}</version>
        </dependency>

    </dependencies>

есть ли возможность создавать экземпляр класса на уровне тестового класса, а не объявлять его в каждом тестовом методе ?


(Борис Осипов) #2

Нет. Инициализировать нужно или в тестовом методе или в Before методах.


(Борис Осипов) #3

Это описано в release notes https://ru.selenide.org/2018/10/10/selenide-5.0.0/


(asolntsev) #4

@Volodymyr_Kozytskiy Ругайте за это TestNG. Это он дебильно инициализирует тест-классы. А с JUnit такой проблемы нет.


(Владимир Козыцький) #5

действительно, большое спасибо ) хорошо что задал этот вопрос при построении фрейморка, а не через какое-то время) сейчас изменил несколько зависимостей и всё завелось, спасибо )


(Владимир Козыцький) #6

помогло решить проблему, спасибо )


(asolntsev) #7

Пожвлуйста, скажи, что перешёл на JUnit?


(Владимир Козыцький) #8

да, мне не особо принципиально было, вот с TestNG больше использовал поэтому и было решено его юзать, но пора и новые инструменты попробовать