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

NoClassDefFoundError when calling open() after adding a WebDriverListener via WebDriverRunner.addListener() #1850

Closed
flange-ipb opened this issue Jun 9, 2022 · 1 comment
Assignees
Labels
dependencies Pull requests that update a dependency file
Milestone

Comments

@flange-ipb
Copy link

The problem

After calling Selenide.open() I get the following exception:

java.lang.NoClassDefFoundError: net/bytebuddy/matcher/ElementMatcher
	at com.codeborne.selenide.drivercommands.CreateDriverCommand.addWebDriverListeners(CreateDriverCommand.java:129)
	at com.codeborne.selenide.drivercommands.CreateDriverCommand.addListeners(CreateDriverCommand.java:103)
	at com.codeborne.selenide.drivercommands.CreateDriverCommand.lambda$createDriver$1(CreateDriverCommand.java:85)
	at com.codeborne.selenide.logevents.SelenideLogger.get(SelenideLogger.java:165)
	at com.codeborne.selenide.drivercommands.CreateDriverCommand.createDriver(CreateDriverCommand.java:53)
	at com.codeborne.selenide.impl.WebDriverThreadLocalContainer.createDriver(WebDriverThreadLocalContainer.java:170)
	at com.codeborne.selenide.impl.WebDriverThreadLocalContainer.getAndCheckWebDriver(WebDriverThreadLocalContainer.java:156)
	at com.codeborne.selenide.WebDriverRunner.getAndCheckWebDriver(WebDriverRunner.java:130)
	at com.codeborne.selenide.impl.StaticDriver.getAndCheckWebDriver(StaticDriver.java:65)
	at com.codeborne.selenide.SelenideDriver.getAndCheckWebDriver(SelenideDriver.java:206)
	at com.codeborne.selenide.drivercommands.Navigator.lambda$navigateTo$0(Navigator.java:72)
	at com.codeborne.selenide.logevents.SelenideLogger.run(SelenideLogger.java:152)
	at com.codeborne.selenide.drivercommands.Navigator.navigateTo(Navigator.java:70)
	at com.codeborne.selenide.drivercommands.Navigator.open(Navigator.java:40)
	at com.codeborne.selenide.SelenideDriver.open(SelenideDriver.java:109)
	at com.codeborne.selenide.SelenideDriver.open(SelenideDriver.java:139)
	at com.codeborne.selenide.SelenideDriver.open(SelenideDriver.java:124)
	at com.codeborne.selenide.Selenide.open(Selenide.java:163)
	at de.ipb_halle.integrationtests.login.LoginTest.before(LoginTest.java:57)
... blabla from JUnit ...
	Suppressed: com.codeborne.selenide.ex.SoftAssertionError: Test If inputs are empty, some validation errors should appear. failed (3 failures)
	java.lang.NoClassDefFoundError: net/bytebuddy/matcher/ElementMatcher
	java.lang.NoClassDefFoundError: net/bytebuddy/matcher/ElementMatcher
	java.lang.NoClassDefFoundError: net/bytebuddy/matcher/ElementMatcher
		at com.codeborne.selenide.logevents.ErrorsCollector.cleanAndGetAssertionError(ErrorsCollector.java:64)
		at com.codeborne.selenide.logevents.ErrorsCollector.cleanAndThrowAssertionError(ErrorsCollector.java:70)
		at com.codeborne.selenide.junit5.SoftAssertsExtension.lambda$afterEach$3(SoftAssertsExtension.java:62)
		at java.util.Optional.ifPresent(Optional.java:159)
		at com.codeborne.selenide.junit5.SoftAssertsExtension.afterEach(SoftAssertsExtension.java:61)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachCallbacks$12(TestMethodTestDescriptor.java:257)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:273)
		at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$14(TestMethodTestDescriptor.java:273)
		at java.util.ArrayList.forEach(ArrayList.java:1259)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:272)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachCallbacks(TestMethodTestDescriptor.java:256)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:141)
		... 47 more
Caused by: java.lang.ClassNotFoundException: net.bytebuddy.matcher.ElementMatcher
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 92 more

My LoginTest class can be found here. The error goes away when I include Byte Buddy in the project.

Details

I nailed the problem down to the addition of a WebDriverListener in my WebDriverConfig class, which is executed via the custom JUnit extension SelenideAllExtension. The error goes away when commenting out the line.

Tell us about your environment

  • Selenide Version: 6.6.0, the issue persists since version 6.3.0
  • Chrome\Firefox\IE Version: Chrome 101.0, Firefox 100.0 (browser type/version does not seem to be the matter)
  • Selenoid Docker Image Version: 1.10.7

Code To Reproduce Issue [ Good To Have ]

Let me know if you need a minimal reproducer.

@asolntsev asolntsev self-assigned this Jun 9, 2022
@asolntsev asolntsev added the dependencies Pull requests that update a dependency file label Jun 9, 2022
@asolntsev asolntsev added this to the 6.6.1 milestone Jun 9, 2022
asolntsev added a commit that referenced this issue Jun 9, 2022
@asolntsev
Copy link
Member

@flange-ipb It was an unexpected finding :)

I personally never experienced this problem because occasionally I use AssertJ library in all my projects. And AssertJ fetches transitively byte-buddy dependency. But your project doesn't use AssertJ, that's why you were getting NoClassDefFoundError.

I have released Selenide 6.6.1 with a fix.

asolntsev added a commit that referenced this issue Sep 25, 2022
Now we have at least two module (junit4) without both Mockito and AssertJ dependencies.
This will verify that Selenide works without them (at least Selenium listeners need byte-buddy).

The case #1850 was that we removed byte-buddy dependency, and Selenide didn't work without it. But our tests didn't show the problem because we occasionally fetched transitive byte-buddy dependency from Mockito or AssertJ.
asolntsev added a commit that referenced this issue Sep 25, 2022
Now we have at least two module (junit4) without both Mockito and AssertJ dependencies.
This will verify that Selenide works without them (at least Selenium listeners need byte-buddy).

The case #1850 was that we removed byte-buddy dependency, and Selenide didn't work without it. But our tests didn't show the problem because we occasionally fetched transitive byte-buddy dependency from Mockito or AssertJ.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependencies Pull requests that update a dependency file
Projects
None yet
Development

No branches or pull requests

2 participants