kazurayam / chromedriverfactory

A Java library that enables you to launch Selenium ChromeDriver using an existing user Profile. That let you to carry cookies over multiple HTTP sessions via user Profile.
0 stars 0 forks source link

ChromeOptions.toString() returns an empty string #66

Closed kazurayam closed 3 months ago

kazurayam commented 3 months ago

The several tests failed due to the same cause

java.lang.AssertionError: json does not contain --incognito
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.assertTrue(Assert.java:41)
    at org.junit.Assert$assertTrue$2.callStatic(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:55)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:197)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:217)
    at com.kazurayam.webdriverfactory.chrome.ChromeDriverFactoryTest$_test_addChromeOptionsModifier_incognito_closure2.doCall(ChromeDriverFactoryTest.groovy:147)

    @Test
    void test_addChromeOptionsModifier_incognito() {
        ChromeDriverFactory cdFactory = ChromeDriverFactory.newChromeDriverFactory()
        //
        cdFactory.addChromeOptionsModifier(ChromeOptionsModifiers.incognito())
        //
        launched = cdFactory.newChromeDriver()
        assertNotNull(launched)
        //println "raw: " + launched.getEmployedOptionsAsJSON()
        launched.getEmployedOptionsAsJSON().ifPresent({ json ->
            println("options is\n${json}")
        })
        launched.getDriver().navigate().to('http://example.com/')
        //
        launched.getEmployedOptionsAsJSON().ifPresent({ String json ->
            println "employed options as json: " + json
            /* Selenium 3
            {
    "browserName": "chrome",
    "goog:chromeOptions": {
        "args": [
            "disable-infobars",
            "disable-dev-shm-usage",
            "disableExtensions",
            "--no-sandbox",
            "disable-gpu",
            "window-size=1024,768",
            "--incognito"
        ],
        "extensions": [

        ],
        "prefs": {
            "plugins.plugins_disabled": [
                "Adobe Flash Player",
                "Chrome PDF Viewer"
            ],
            "profile.default_content_settings.popups": 0,
            "download.prompt_for_download": false,
            "download.default_directory": "/Users/kazuakiurayama/Downloads"
        }
    }
}
             */
            /* Selenium 4
{
  "args": [
    "plugins.plugins_disabled\u003d[Adobe Flash Player, Chrome PDF Viewer]",
    "profile.default_content_settings.popups\u003d0",
    "download.prompt_for_download\u003dfalse",
    "download.default_directory\u003d/Users/kazuakiurayama/Downloads",
    "disable-infobars",
    "disable-dev-shm-usage",
    "--no-sandbox",
    "disable-gpu",
    "window-size\u003d1024,768",
    "disableExtensions",
    "--incognito"
  ],
  "extensionFiles": [],
  "extensions": [],
  "experimentalOptions": {},
  "androidOptions": {},
  "capabilityName": "goog:chromeOptions",
  "caps": {
    "browserName": "chrome"
  }
}
             */
            assertTrue("json does not contain --incognito", json.contains("--incognito"))
        })
    }
> Task :compileJava UP-TO-DATE
> Task :compileGroovy NO-SOURCE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :compileTestJava NO-SOURCE
> Task :compileTestGroovy UP-TO-DATE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
[Test worker] INFO io.github.bonigarcia.wdm.cache.ResolutionCache - Clearing WebDriverManager resolution cache
[Test worker] INFO io.github.bonigarcia.wdm.WebDriverManager - Using chromedriver 123.0.6312.58 (resolved driver for Chrome 123)
[Test worker] INFO io.github.bonigarcia.wdm.online.Downloader - Downloading https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.58/mac-x64/chromedriver-mac-x64.zip
[Test worker] INFO io.github.bonigarcia.wdm.online.Downloader - Extracting driver from compressed file chromedriver-mac-x64.zip
[Test worker] INFO io.github.bonigarcia.wdm.WebDriverManager - Exporting webdriver.chrome.driver as /Users/kazuakiurayama/.cache/selenium/chromedriver/mac64/123.0.6312.58/chromedriver
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.ChromeDriverFactoryImpl - [newChromeDriver] this.chromePreferencesModifiers: [{"type":"disableViewersOfFlashAndPdf","argument":[]}, {"type":"downloadWithoutPrompt","argument":[]}]
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.ChromeDriverFactoryImpl - [newChromeDriver] this.chromeOptionsModifiers: [{"type":"disableExtensions","argument":[]}, {"type":"noSandbox","argument":[]}, {"type":"disableGpu","argument":[]}, {"type":"windowSize","argument":["1024","768"]}, {"type":"incognito","argument":[]}, {"type":"disableInfobars","argument":[]}, {"type":"disableDevShmUsage","argument":[]}]
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.ChromeDriverFactoryImpl - [newChromeDriver] options: Capabilities {browserName: chrome}
Starting ChromeDriver 123.0.6312.58 (6b4b19e9dfbb93aa414dc045bd445287977d8d7a-refs/branch-heads/6312_46@{#3}) on port 7358
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Mar 23, 2024 3:20:13 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.LaunchedChromeDriver - [getEmployedOptionsAsJson] options.isPresent(): true
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.LaunchedChromeDriver - [getEmployedOptionsAsJson] options.get(): Capabilities {browserName: chrome}
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.LaunchedChromeDriver - [getEmployedOptionsAsJson] gson.toJson(options.get()): {}
options is
{}
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.LaunchedChromeDriver - [getEmployedOptionsAsJson] options.isPresent(): true
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.LaunchedChromeDriver - [getEmployedOptionsAsJson] options.get(): Capabilities {browserName: chrome}
[Test worker] INFO com.kazurayam.webdriverfactory.chrome.LaunchedChromeDriver - [getEmployedOptionsAsJson] gson.toJson(options.get()): {}
employed options as json: {}

java.lang.AssertionError: json does not contain --incognito
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.assertTrue(Assert.java:41)
    at org.junit.Assert$assertTrue$0.callStatic(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:55)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:197)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:217)
    at com.kazurayam.webdriverfactory.chrome.ChromeDriverFactoryTest$_test_addChromeOptionsModifier_incognito_closure2.doCall(ChromeDriverFactoryTest.groovy:147)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
    at groovy.lang.Closure.call(Closure.java:420)
    at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:54)
    at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:124)
    at jdk.proxy1/jdk.proxy1.$Proxy23.accept(Unknown Source)
    at java.base/java.util.Optional.ifPresent(Optional.java:178)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrap.invoke(PojoMetaMethodSite.java:213)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
    at com.kazurayam.webdriverfactory.chrome.ChromeDriverFactoryTest.test_addChromeOptionsModifier_incognito(ChromeDriverFactoryTest.groovy:92)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
    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:40)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    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 jdk.proxy2/jdk.proxy2.$Proxy5.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
    at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

> Task :testFailed
com.kazurayam.webdriverfactory.chrome.ChromeDriverFactoryTest > test_addChromeOptionsModifier_incognito FAILED
    java.lang.AssertionError at ChromeDriverFactoryTest.groovy:92
1 test completed, 1 failed
> Task :testFailed FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':testFailed'.
> There were failing tests. See the report at: file:///Users/kazuakiurayama/github/chromedriverfactory/build/reports/tests/testFailed/index.html
* Try:
> Run with --scan to get full insights.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD FAILED in 23s
3 actionable tasks: 1 executed, 2 up-to-date
kazurayam commented 3 months ago

The reason:

ChromeOptions.toString() does not return a valid JSON string. It returns an empty "" string.

kazurayam commented 3 months ago

I guess ChromeDriver v144 and older version the ChromeOptions.toString() returned a valid JSON ; but sinice the newer version returns "". The implementation changed.

kazurayam commented 3 months ago

I should use ChromeOptions.asMap().toString() to get a valid JSON representation