Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DriverConfigurationError with SerenityParameterizedRunner - when print current driver details #2787

Open
svgamya opened this issue Apr 20, 2022 · 0 comments

Comments

@svgamya
Copy link

svgamya commented Apr 20, 2022

@wakeleo
Issue:
DriverConfigurationError with SerenityParameterizedRunner when print current driver details for DataDriven test

How driver initialization is different for SerenityRunner and SerenityParameterizedRunner ?

Stacktrace:
Could not create test data beans

  • *net.thucydides.core.csv.FailedToInitializeTestData: Could not create test data beans
    at net.thucydides.core.steps.stepdata.CSVTestDataSource.createNewInstanceOf(CSVTestDataSource.java:246)
    at net.thucydides.core.steps.stepdata.CSVTestDataSource.newInstanceFrom(CSVTestDataSource.java:206)
    at net.thucydides.core.steps.stepdata.CSVTestDataSource.getDataAsInstancesOf(CSVTestDataSource.java:181)
    at net.serenitybdd.junit.runners.DataDrivenAnnotations.getDataAsInstancesOf(DataDrivenAnnotations.java:184)
    at net.serenitybdd.junit.runners.SerenityParameterizedRunner.buildTestRunnersFromADataSourceUsing(SerenityParameterizedRunner.java:149)
    at net.serenitybdd.junit.runners.SerenityParameterizedRunner.(SerenityParameterizedRunner.java:71)
    at net.serenitybdd.junit.runners.SerenityParameterizedRunner.(SerenityParameterizedRunner.java:205)
    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:408)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70)
    at org.junit.internal.requests.ClassRequest.createRunner(ClassRequest.java:28)
    at org.junit.internal.requests.MemoizingRequest.getRunner(MemoizingRequest.java:19)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:78)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
    at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: net.thucydides.core.webdriver.DriverConfigurationError: Could not instantiate class org.openqa.selenium.chrome.ChromeDriver
    at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:144)
    at net.thucydides.core.webdriver.WebDriverFacade.newProxyDriver(WebDriverFacade.java:132)
    at net.thucydides.core.webdriver.WebDriverFacade.getProxiedDriver(WebDriverFacade.java:102)
    at net.serenitybdd.core.webdriver.RemoteDriver.of(RemoteDriver.java:13)
    at com.edwardjones.testautomation.utilities.DriverUtils.getBrowserVersion(DriverUtils.java:40)
    at com.edwardjones.testautomation.utilities.DriverUtils.returnDriverDetails(DriverUtils.java:125)
    at com.edwardjones.testautomation.utilities.DriverUtils.printDriverDetails(DriverUtils.java:135)
    at com.edwardjones.automation.execution.BaseTest.(BaseTest.java:29)
    at com.edwardjones.test.testcases.RecurringACHTest.(RecurringACHTest.java:21)
    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:408)
    at java.lang.Class.newInstance(Class.java:438)
    at net.thucydides.core.csv.InstanceBuilder.newInstanceOf(InstanceBuilder.java:33)
    at net.thucydides.core.steps.stepdata.CSVTestDataSource.createNewInstanceOf(CSVTestDataSource.java:243)
    ... 47 more
    Caused by: net.thucydides.core.webdriver.DriverConfigurationError: Could not instantiate new WebDriver instance of type class org.openqa.selenium.chrome.ChromeDriver (No BaseStepListener has been registered). See below for more details.
    at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:159)
    at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:141)
    ... 62 more
    Caused by: java.lang.NullPointerException: No BaseStepListener has been registered
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:897)
    at net.thucydides.core.steps.StepEventBus.getBaseStepListener(StepEventBus.java:139)
    at net.serenitybdd.core.webdriver.driverproviders.DriverCapabilities.remoteCapabilities(DriverCapabilities.java:123)
    at net.serenitybdd.core.webdriver.driverproviders.DriverCapabilities.forDriver(DriverCapabilities.java:44)
    at net.serenitybdd.core.webdriver.driverproviders.DefaultRemoteDriver.buildRemoteCapabilities(DefaultRemoteDriver.java:32)
    at net.serenitybdd.core.webdriver.driverproviders.DefaultRemoteDriver.buildWithOptions(DefaultRemoteDriver.java:23)
    at net.serenitybdd.core.webdriver.driverproviders.RemoteDriverProvider.newInstance(RemoteDriverProvider.java:54)
    at net.thucydides.core.webdriver.WebDriverFactory.createWebDriver(WebDriverFactory.java:170)
    at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:151)
    ... 63 more

I want to print current driver details like that:
[INFO ] 2022-04-20 10:22:57.809 11 BaseTest - ** ** hub address: http://selenium.someaddress.com:5555/wd/hub ** **
[INFO ] 2022-04-20 10:22:57.810 11 BaseTest - ** ** connected to grid on: http://selenium. someaddress.com:5555/grid/api/testsession?session=0ef1655b6fb3d2605900a344ed025ab4 ** **
[INFO ] 2022-04-20 10:22:57.987 11 BaseTest - ** ** testSourceName : MANUAL ** **
[INFO ] 2022-04-20 10:22:57.988 11 BaseTest - ** ** browserVersion : 96.0.4664.110 ** **
[INFO ] 2022-04-20 10:22:57.988 11 BaseTest - ** ** browserName : chrome ** **
[INFO ] 2022-04-20 10:22:57.988 11 BaseTest - ** ** sessionID : 0ef1655b6fb3d2605900a344ed025ab4 ** **
[INFO ] 2022-04-20 10:22:57.989 11 BaseTest - ** ** nodeID : http://A6-6A-D5-24-EE:5500 ** **
[INFO ] 2022-04-20 10:22:57.989 11 BaseTest - ** ** platform : WINDOWS ** **

** ** BaseTest where I print current driver details: ** **

public class BaseTest {

@Managed
protected WebDriver driver;

public BaseTest() {
DriverUtils.printDriverDetails();
}

** ** Data Driven Test case ** **

@RunWith(SerenityParameterizedRunner.class)
@UseTestDataFrom("$DATADIR/regressionData.csv")

public class CurrentDriverTest extends BaseTest {

@Steps
TestInputsSteps testInputsSteps;

public void setrelationshipId (String relationshipId) {
this.relationshipId = relationshipId;
}
public void setcountryCode (String countryCode) {
this.countryCode = countryCode;
}

@Test
@WithTag("priority-1")
public void validateTestInputsPage() {
    launchGoal(GoalType.DIS, relationshipId, countryCode);
    testInputsSteps.validateTestInputsPage();
}

}

** ** Get driver details implementation : ** **
public class DriverUtils {

public static String getBrowserName() {
    return RemoteDriver.of(Serenity.getDriver()).getCapabilities().getBrowserName().toLowerCase();
}

public static String getBrowserVersion() {
    return RemoteDriver.of(Serenity.getDriver()).getCapabilities().getVersion();
}

etc


** ** NOTE1: ** **
No issues for @RunWith(SerenityRunner.class)

** ** NOTE2: ** **
No issues when reading driver details before the class and not from Basetest constructor but that solution conflicts with my Cucumber tests:

public class BaseTest {

@Managed
protected WebDriver driver;

public BaseTest() {
}

private static Class<? extends BaseTest> testClass;

/**
 * print driver details once for each test class
 */
@Before
public void printDriverDetailsBeforeTestClass() {
    if (this.getClass().equals(testClass)) {
        return;
    }
    DriverUtils.printDriverDetails();
    testClass = this.getClass();
}

}

wakaleo added a commit that referenced this issue Apr 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant