Closed
Bug 1366988
Opened 8 years ago
Closed 7 years ago
GeckoDriver#registerBrowser does not check if tab browser is available before getting
Categories
(Remote Protocol :: Marionette, defect, P4)
Tracking
(Not tracked)
RESOLVED
DUPLICATE
of bug 1311041
People
(Reporter: markus.hartung, Unassigned)
Details
User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.61 Safari/537.36
Steps to reproduce:
https://github.com/markus-hartung-avira/marionette-popup-bug
Run the PopupTest class to run the test.
The test does the following:
1. Start a Firefox session with an extension installed
2. Click the extension icon which opens the popup
3. Check if an element is displayed in the popup
4. Close the popup by sending escape key
5. Check if the extension icon is displayed
I tested this with FF53 and FF54
Actual results:
After step 4 the following error is logged:
JavaScript error: chrome://marionette/content/driver.js, line 523: TypeError: be.getTabBrowser is not a function
Executing step 5 results in:
*************************
A coding exception was thrown and uncaught in a Task.
Full message: TypeError: can't access dead object
Full stack:
*************************
*************************
A coding exception was thrown and uncaught in a Task.
Full message: TypeError: can't access dead object
Full stack:
*************************
*************************
A coding exception was thrown in a Promise rejection callback.
See https://developer.mozilla.org/Mozilla/JavaScript_code_modules/Promise.jsm/Promise
Full message: TypeError: can't access dead object
Full stack:
*************************
Marionette threw an error: TypeError: can't access dead object
Exception in thread "main" org.openqa.selenium.WebDriverException: TypeError: can't access dead object
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'LTTW0350', ip: '169.254.244.75', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_101'
Driver info: FirefoxDriver
Capabilities: Not needed.
Session ID: caa4a718-335f-4864-ba40-94c9e049b7c6
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:150)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:115)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:45)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at FirefoxDriver.execute(FirefoxDriver.java:33)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
at org.openqa.selenium.remote.RemoteWebElement.isDisplayed(RemoteWebElement.java:313)
at PopupTest.main(PopupTest.java:48)
Expected results:
isDisplayed should have returned true
Comment 1•8 years ago
|
||
And does this happen on Firefox Nightly?
be.getTabBrowser is called in GeckoDriver#registerBrowser (https://searchfox.org/mozilla-central/rev/6c2dbacbba1d58b8679cee700fd0a54189e0cf1b/testing/marionette/driver.js#518), which means this isn’t directly related to the Is Element Displayed command, but is instead associated with the code that is run when a content frame script (testing/marionette/listener.js) registers with the chrome context. This happens whenever a new <xul:browser> appears.
Updated•8 years ago
|
Priority: -- → P4
Reporter | ||
Comment 2•8 years ago
|
||
Yes it is the same issue on Nightly.
Reporter | ||
Comment 3•8 years ago
|
||
I extended the check in the driver to
if (this.appName != "Firefox" || be.namespaceURI != XUL_NS ||
be.nodeName != "browser" || (be.getTabBrowser && be.getTabBrowser())) {
so that it doesn't throw an error.
But the subsequent isDisplayed will still throw the same error
Comment 4•8 years ago
|
||
(In reply to Markus Hartung from comment #3)
> I extended the check in the driver to
> if (this.appName != "Firefox" || be.namespaceURI != XUL_NS ||
> be.nodeName != "browser" || (be.getTabBrowser && be.getTabBrowser())) {
That seems like an OK change to make. Please feel free to submit a patch.
> But the subsequent isDisplayed will still throw the same error
That would be a separate bug.
Updated•8 years ago
|
Summary: Closing extension popup breaks isDisplayed → GeckoDriver#registerBrowser does not check if tab browser is available before getting
Comment 5•7 years ago
|
||
This will get resolved as part of https://bugzil.la/marionette-window-tracking.
Status: UNCONFIRMED → RESOLVED
Closed: 7 years ago
Resolution: --- → DUPLICATE
Updated•2 years ago
|
Product: Testing → Remote Protocol
You need to log in
before you can comment on or make changes to this bug.
Description
•