mozilla / geckodriver

WebDriver for Firefox
https://firefox-source-docs.mozilla.org/testing/geckodriver/
Mozilla Public License 2.0
7.03k stars 1.51k forks source link

TypeError: c is undefined -> Trying to call getText() of a WebElement instance #2050

Closed Zardoz89 closed 1 year ago

Zardoz89 commented 1 year ago

System

Testcase

Trying to call getText() of a WebElement instance returned by a @FindBy tag

public class ApiDetalleBibliograficoPage
{
    @FindBy(tagName = "accessRestriction")
    List<WebElement> accessRestrictionElements;

    public List<WebElement> getAccessRestrictionElements()
    {
        return this.accessRestrictionElements;
    }
}

...
    @BeforeClass
    public static void setUpBeforeClass()
        throws Exception
    {
...
        detallePage = PageFactory.initElements(driver, ApiDetalleBibliograficoPage.class);
    }
...
    @Test
    public void test01DetalleId()
        throws Exception
    {
...
        detallePage.getAccessRestrictionElements().get(0).getText().trim()); // Throws an error
    }

I verified that the page had a valid XML document that contains the node and contains some text :

<?xml version="1.0" encoding="UTF-8"?>
<dgbRecord xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.digibis.com/schemas/dgb-bibdetail-v1.0.xsd"><recordHeader><id>779</id><controlNumber>BAB20120007468</controlNumber><section cod="MON">GEN-Monografías</section><originalObjectType>monografia</originalObjectType><thumbnail>http://digibis-int.digibis.com:8080/digibisbib_int/i18n//api/thumbnail.do?id=2730</thumbnail><accessRestriction>digital_contents</accessRestriction><mainTitle>Se puede consultar, ver la ficha y acceder al contenido</mainTitle><publication>Madrid : Digibís, 2012</publication><publicationDate>2012</publicationDate></recordHeader><metadata format="ficha_xml"><bibliographic>
<title label="Título">Se puede consultar, ver la ficha y acceder al contenido</title>
<publication label="Publicación">Madrid : Digibís, 2012</publication>
<physicalDescription label="Descripción física">1</physicalDescription>
<note label="Notas">Prueba de accesos. Búsqueda Europeana</note>
</bibliographic></metadata></dgbRecord>

Stacktrace

org.openqa.selenium.WebDriverException: 
TypeError: c is undefined
Build info: version: '4.5.0', revision: 'fe167b119a'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-191-generic', java.version: '11.0.16'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Command: [fd7c5836-4540-4690-858e-d32d9cd39e59, getElementText {id=ab561401-2975-4c02-a8e9-b8cd174d0b4c}]
Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 105.0, moz:accessibilityChecks: false, moz:buildID: 20220915150737, moz:debuggerAddress: 127.0.0.1:49963, moz:geckodriverVersion: 0.31.0, moz:headless: true, moz:platformVersion: 4.15.0-191-generic, moz:processID: 8568, moz:profile: /tmp/rust_mozprofileihd97r, moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, moz:windowless: false, pageLoadStrategy: normal, platformName: LINUX, proxy: Proxy(), se:cdp: ws://127.0.0.1:49963/devtoo..., se:cdpVersion: 85.0, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Element: [[FirefoxDriver: firefox on LINUX (fd7c5836-4540-4690-858e-d32d9cd39e59)] -> xpath: //issueHeader/issueId]
Session ID: fd7c5836-4540-4690-858e-d32d9cd39e59
[PRUEBAS_AUTO] ERROR 05:20:24.539 c.d.d.TestAutomaticosExported - Error Throwable org.openqa.selenium.WebDriverException cargando URL: http://digibis-int.digibis.com:8080/digibisbib_int/i18n/api/issue.do?id=42
[java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method),
 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62),
 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45),
 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490),
 org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:200),
 org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:133),
 org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:53),
 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:184),
 org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:167),
 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:142),
 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:547),
 org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:257),
 org.openqa.selenium.remote.RemoteWebElement.getText(RemoteWebElement.java:207),
 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
 java.base/java.lang.reflect.Method.invoke(Method.java:566), 
org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement.lambda$new$0(EventFiringWebDriver.java:377), com.sun.proxy.$Proxy21.getText(Unknown Source),
 org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement.getText(EventFiringWebDriver.java:441),
 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
 java.base/java.lang.reflect.Method.invoke(Method.java:566),
 org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:52),
 com.sun.proxy.$Proxy20.getText(Unknown Source), com.digibis.digibib.exported.TestAPIDetalleNumeroExported.test1NumeroId(TestAPIDetalleNumeroExported.java:54), java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method), 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62), 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), 
java.base/java.lang.reflect.Method.invoke(Method.java:566), 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59), 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12), 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56), 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17), 
org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306), 
org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100), 
org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366), 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103), 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63), 
org.junit.runners.ParentRunner$4.run(ParentRunner.java:331), 
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79), org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329), org.junit.runners.ParentRunner.access$100(ParentRunner.java:66), org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293), org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26), org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27), org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306), 
org.junit.runners.ParentRunner.run(ParentRunner.java:413), 
org.junit.runners.Suite.runChild(Suite.java:128), 
org.junit.runners.Suite.runChild(Suite.java:27), 
org.junit.runners.ParentRunner$4.run(ParentRunner.java:331), 
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79), org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329), org.junit.runners.ParentRunner.access$100(ParentRunner.java:66), org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293), org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306), 
org.junit.runners.ParentRunner.run(ParentRunner.java:413), org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:55), org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:137), org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:107), org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:83), org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75), org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:158), org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:377), org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:138), org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:465), org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:451)] 

Trace-level log

Here it's the trace level log Trace-level log.txt

whimboo commented 1 year ago

Could you please attach a trace-level log from geckodriver? Also a minimized HTML testcase would be great to have. Right now it's not clear if this comes from geckodriver or your in use Selenium binding.

Zardoz89 commented 1 year ago

Could you please attach a trace-level log from geckodriver? Also a minimized HTML testcase would be great to have. Right now it's not clear if this comes from geckodriver or your in use Selenium binding.

I uploaded the trace level log.

I put the exact XML (yes, XML, not HTML) that the server responds on the issue.

PD: I know that using Selenium to run tests against a XML it's odd (I didn't create this tests). But this tests have many years, and had been working fine a lot of time. Only we begin to get this error a few days ago with the last automate update of Firefox

whimboo commented 1 year ago

Thanks. The trace log revealed some information:

atom ... mmandsChild.jsm:335:22\nreceiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.jsm:121:31\n"},null]
1665120483225   webdriver::server       DEBUG   <- 500 Internal Server Error {"value":{"error":"unknown error","message":"TypeError: c is undefined","stacktrace":"$b@chrome://remote/content/marionette/atom.js:85:50\nX@chrome://remote/content/marionette/atom.js:83:252\njc@chrome://remote/content/marionette/atom.js:96:68\noc@chrome://remote/content/marionette/atom.js:101:95\natom.getElementText/</<@chrome://remote/content/marionette/atom.js:104:295\natom.getElementText/<@chrome://remote/content/marionette/atom.js:104:481\natom.getElementText@chrome://remote/content/marionette/atom.js:104:505\ngetElementText@chrome://remote/content/marionette/actors/MarionetteCommandsChild.jsm:335:22\nreceiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.jsm:121:31\n"}}

So the underlying problem is the call into the Selenium atoms when using getText().

Also thanks a lot for the XML testcase. I can reproduce this locally now with using Marionette directly. I filed https://bugzilla.mozilla.org/show_bug.cgi?id=1794099 to handle this particular issue.

whimboo commented 1 year ago

@Zardoz89 please note that as long this isn't fixed you can set the following Firefox preference and the test should pass: layout.css.computed-style.styles-outside-flat-tree=true.

whimboo commented 1 year ago

Again, thanks for your help. The fix landed and should be available in the most recent Firefox 108 nightly build.