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

Error when attempting to .click() on DomElement #491

Open
Patrick-Erichsen opened this issue Dec 19, 2024 · 2 comments
Open

Error when attempting to .click() on DomElement #491

Patrick-Erichsen opened this issue Dec 19, 2024 · 2 comments

Comments

@Patrick-Erichsen
Copy link

Patrick-Erichsen commented Dec 19, 2024

Overview

When attempting to click on a DomElement found using the JCefBrowserFixture, I get the error logs below.

Relevant logs

Dec 19, 2024 3:00:34 PM com.intellij.remoterobot.stepsProcessing.StepLogger doBeforeStep
INFO:         find DOM elements by '//*[contains(text(), 'Get started')]'
Dec 19, 2024 3:00:34 PM com.intellij.remoterobot.stepsProcessing.StepLogger doBeforeStep
INFO:     click at BUTTON
Dec 19, 2024 3:00:34 PM com.intellij.remoterobot.stepsProcessing.StepLogger doBeforeStep
INFO:         scroll to BUTTON
Dec 19, 2024 3:00:34 PM com.intellij.remoterobot.stepsProcessing.StepLogger doOnFail
WARNING:             Failed on step: scroll to BUTTON (StepWorker.kt_step)
...
com.intellij.remoterobot.fixtures.JCefBrowserFixture$JCEFScriptExecutionError: Failed to execute script:

            const cefBrowser = local.get("__cefBrowser");
            if (!cefBrowser) {
                throw new Error("__cefBrowser was not initialized");
            }
            const query = local.get("__Query");
            if (!query) {
                throw new Error("__Query was not initialized");
            }
            const inProgress = "IN PROGRESS"
            local.put("__Result", inProgress);
            const getResult = () => local.get("__Result")

            const initScript = `  window.elementFinder = {};  function Elm(element) { this.tag = element.tagName; this.html = element.outerHTML; this.location = element.getBoundingClientRect(); this.xpath = '/' + window.elementFinder.getPathTo(element).toLowerCase(); }  window.elementFinder.findElement = (xpath) => { console.log("findElement: by '" + xpath + "'"); return document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; };  window.elementFinder.scrollByXpath = (xpath) => { console.log("scrollByXpath: to '" + xpath + "'"); const element = window.elementFinder.findElement(xpath); console.log("found: " + element); element.scrollIntoView(); return "success"; };  window.elementFinder.findElements = (xpath) => { console.log("findElements: by '" + xpath + "'"); const foundElements = []; const nodesSnapshot = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); for (let i = 0; i < nodesSnapshot.snapshotLength; i++ ) { foundElements.push( nodesSnapshot.snapshotItem(i) ); } console.log("found " + foundElements.length); const result = foundElements.map((it) => new Elm(it)); return JSON.stringify(result); };  window.elementFinder.getPathTo = (element) => { if (element.tagName.toLowerCase() === 'html') { return element.tagName; } let ix = 0; const siblings = element.parentNode.childNodes; for (let i = 0; i < siblings.length; i++) { const sibling = siblings[i]; if (sibling === element) { return window.elementFinder.getPathTo(element.parentNode) + '/' + element.tagName + '[' + (ix + 1) + ']'; } if (sibling.nodeType === 1 && sibling.tagName === element.tagName) { ix++; } } };  `
            cefBrowser.executeJavaScript(initScript, cefBrowser.getURL(), 0);
            
            cefBrowser.executeJavaScript(query.inject('window.elementFinder.scrollByXpath("/html/body[1]/div[1]/div[1]/div[1]/div[2]/div[1]/main[1]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/pre[1]/code[1]")'), cefBrowser.getURL(), 0);
            let x = 0;
            // noinspection EqualityComparisonWithCoercionJS
            while(getResult() == inProgress) {
                Thread.sleep(50);
                x++;
                if (x * 50 > 3000) {
                    throw "No result from script 'window.elementFinder.scrollByXpath("/html/body[1]/div[1]/div[1]/div[1]/div[2]/div[1]/main[1]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/pre[1]/code[1]")' in embedded browser. Check logs in browsers DevTools(right click at the browser)" 
                }
            }
            getResult();
        
	at com.intellij.remoterobot.fixtures.JCefBrowserFixture.executeJsInBrowser(JCefBrowserFixture.kt:213)
	at com.intellij.remoterobot.fixtures.JCefBrowserFixture.scrollTo(JCefBrowserFixture.kt:170)
	at com.intellij.remoterobot.fixtures.DomElement$scroll$1.invoke(JCefBrowserFixture.kt:292)
	at com.intellij.remoterobot.fixtures.DomElement$scroll$1.invoke(JCefBrowserFixture.kt:291)
	at com.intellij.remoterobot.stepsProcessing.StepWorkerKt.step(StepWorker.kt:23)
	at com.intellij.remoterobot.fixtures.DomElement.scroll(JCefBrowserFixture.kt:291)
	at com.intellij.remoterobot.fixtures.DomElement$click$1.invoke(JCefBrowserFixture.kt:283)
	at com.intellij.remoterobot.fixtures.DomElement$click$1.invoke(JCefBrowserFixture.kt:282)
	at com.intellij.remoterobot.stepsProcessing.StepWorkerKt.step(StepWorker.kt:23)
	at com.intellij.remoterobot.fixtures.DomElement.click(JCefBrowserFixture.kt:282)
	at com.github.continuedev.continueintellijextension.e2e.GUITests$completeTutorial$1$4.invoke(GUITests.kt:91)
	at com.github.continuedev.continueintellijextension.e2e.GUITests$completeTutorial$1$4.invoke(GUITests.kt:86)
	at com.intellij.remoterobot.stepsProcessing.StepWorkerKt.step(StepWorker.kt:23)
	at com.github.continuedev.continueintellijextension.e2e.GUITests.completeTutorial(GUITests.kt:86)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:118)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:93)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:88)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	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.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	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)
Caused by: com.intellij.remoterobot.client.IdeaSideException: missing ; before statement
	at com.intellij.remoterobot.client.IdeRobotClient.throwIdeaSideError(IdeRobotClient.kt:141)
	at com.intellij.remoterobot.client.IdeRobotClient.processRetrieveResponse(IdeRobotClient.kt:117)
	at com.intellij.remoterobot.client.IdeRobotClient.retrieve(IdeRobotClient.kt:79)
	at com.intellij.remoterobot.JavaScriptApi$DefaultImpls.callJs(JavaScriptApi.kt:101)
	at com.intellij.remoterobot.RemoteRobot.callJs(RemoteRobot.kt:32)
	at com.intellij.remoterobot.fixtures.Fixture.callJs(Fixture.kt:104)
	at com.intellij.remoterobot.fixtures.Fixture.callJs$default(Fixture.kt:97)
	at com.intellij.remoterobot.fixtures.JCefBrowserFixture.executeJsInBrowser(JCefBrowserFixture.kt:211)
	... 97 more

Code to reproduce

 val jcefBrowser =
                find<JCefBrowserFixture>(if (isMac()) JCefBrowserFixture.macLocator else JCefBrowserFixture.canvasLocator)

val testElem = jcefBrowser.findElementByContainsText("Sample string in browser")
testElem.click() // This line fails with the above errors

Relevant information

  • Library version: 0.11.23
  • OffScreenRendering is enabled (note that when this was disabled, I couldn't target the browser at all)
  • Build config:
 runIdeForUiTests {
        systemProperty("robot-server.port", "8082")
        systemProperty("ide.mac.message.dialogs.as.sheets", "false")
        systemProperty("jb.privacy.policy.text", "<!--999.999-->")
        systemProperty("jb.consents.confirmation.enabled", "false")
        systemProperty("ide.mac.file.chooser.native", "false")
        systemProperty("jbScreenMenuBar.enabled", "false")
        systemProperty("apple.laf.useScreenMenuBar", "false")
        systemProperty("idea.trust.all.projects", "true")
        systemProperty("ide.show.tips.on.startup.default.value", "false")
        systemProperty("ide.browser.jcef.jsQueryPoolSize", "10000")
        systemProperty("ide.browser.jcef.contextMenu.devTools.enabled", "true")

        intellij {
            version.set("2024.1")
        }
    }

Troubleshooting steps taken

I copied the JCefBrowserFixture class into my project and tried to comment out the scroll() line here, got the same "missing ; before statement" error

@HutorovaMN
Copy link

I have the same problem, but if you check debug there will be successful access to the element.
findElements: by '//div[@Class='MenuIcon_menu_nHwqX']'
url=main:1 found 1
url=main:1 Uncaught TypeError: window.cefQuery_1383042106_27 is not a function
at url=main:1:8

@HutorovaMN
Copy link

Perhaps you have found a solution?

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

2 participants