appium / java-client

Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol
Apache License 2.0
1.18k stars 752 forks source link

Failed resolution of: Ljava/net/http/HttpClient; #2117

Open LivPNavusoft opened 4 months ago

LivPNavusoft commented 4 months ago

Description

Attempting to setup Appium in a KMM app, currently working on the Android side. Attempting to run a basic test results in the runtime error in the title when the AndroidDriver() is instantiated.

Environment

Details

Please provide more details, if necessary.

Attempting to run the test always fails at driver = AndroidDriver(url, options) and results in the stack trace below. The missing library, java.net.http.HttpClient, doesn't appear to be available on Android.

Failed resolution of: Ljava/net/http/HttpClient;
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.<init>(JdkHttpClient.java:90)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient$Factory.createClient(JdkHttpClient.java:475)
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:114)
at io.appium.java_client.remote.AppiumCommandExecutor.<init>(AppiumCommandExecutor.java:75)
at io.appium.java_client.remote.AppiumCommandExecutor.<init>(AppiumCommandExecutor.java:102)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:102)
at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:109)
at com.navusoft.navusaleskmp.test.utils.AuthTest.setUp(AppiumSetup.kt:31)

Code To Reproduce Issue

https://gist.github.com/LivPNavusoft/a190821ffeab12430f651a02727e9b0a

Exception Stacktraces

https://gist.github.com/LivPNavusoft/3ea2a999730d7c2ef6c7d6772ead3131

Link To Appium Logs

None generated, it never connects. Verified I can start a session with AppiumInspector

mykola-mokhnach commented 4 months ago

This is probably something related to Kotlin and has nothing to do with this lib. Try https://github.com/ktorio/ktor/issues/1608

LivPNavusoft commented 4 months ago

@mykola-mokhnach Hello! We do not make use of Ljava/net/http/HttpClient; anywhere in this project. The test code in the gist is the only code being ran, and is just boilerplate based on Appium Inspector's code for establishing a session connection. It appears to be called from AndroidDriver's instantiation

mykola-mokhnach commented 4 months ago

It does not really matter. java/net/http/HttpClient is the standard Java HTTP client implementation since JDK9 and is used by selenium to communicate with the remote server. Absence of it would make such communication impossible. A workaround would be to avoid the use of this lib and to build a custom client based on a different downstream implementation.

LivPNavusoft commented 4 months ago

I may misunderstand, java/net/http/HttpClient is certainly the standard, but as far as I'm aware it has never been available in Android. How is the AndroidDriver typically set up to work around this?

mykola-mokhnach commented 4 months ago

I don't have an answer there. The client is designed to work on Linux/macOS or Windows host running OpenJDK 11+ runtime. We have never tested the compatibility to other environments (Selenium did not as well)