Repository: spyder-ide/spyder

Issue:
AttributeError when doing a right-click on a WebView widget
## Description

### What steps will reproduce the problem?

<!--- You can use Markdown here --->

worked with numpy, pandas and matlibplot and then the kernel gave up and always gave me an 'ERROR: execution aborted'. I though id update to spyder 5 and then the spyder-kernel dependancy was totally off. I installed spyder-kernel with pip but the dependancy wasnt up dated accordingly.

### Traceback
```python-traceback
Traceback (most recent call last):
  File "C:\Users\chris\AppData\Local\Programs\Spyder\pkgs\spyder\widgets\browser.py", line 332, in contextMenuEvent
    self.context_menu.popup(event.globalPos())
AttributeError: 'NoneType' object has no attribute 'popup'
```

## Versions

* Spyder version: 5.0.0 
* Python version: 3.7.9
* Qt version: 5.12.10
* PyQt5 version: 5.12.3
* Operating System: Windows 10

### Dependencies

```

# Mandatory:
atomicwrites >=1.2.0          :  1.4.0 (OK)
chardet >=2.0.0               :  4.0.0 (OK)
cloudpickle >=0.5.0           :  1.6.0 (OK)
cookiecutter >=1.6.0          :  1.7.2 (OK)
diff_match_patch >=20181111   :  20200713 (OK)
intervaltree                  :  None (OK)
IPython >=7.6.0               :  7.22.0 (OK)
jedi =0.17.2                  :  0.17.2 (OK)
jsonschema >=3.2.0            :  3.2.0 (OK)
keyring >=17.0.0              :  23.0.1 (OK)
nbconvert >=4.0               :  6.0.7 (OK)
numpydoc >=0.6.0              :  1.1.0 (OK)
paramiko >=2.4.0              :  2.7.2 (OK)
parso =0.7.0                  :  0.7.0 (OK)
pexpect >=4.4.0               :  4.8.0 (OK)
pickleshare >=0.4             :  0.7.5 (OK)
psutil >=5.3                  :  5.8.0 (OK)
pygments >=2.0                :  2.8.1 (OK)
pylint >=1.0                  :  2.7.4 (OK)
pyls >=0.36.2;<1.0.0          :  0.36.2 (OK)
pyls_black >=0.4.6            :  0.4.6 (OK)
pyls_spyder >=0.3.2           :  0.3.2 (OK)
qdarkstyle =3.0.2             :  3.0.2 (OK)
qstylizer >=0.1.10            :  0.1.10 (OK)
qtawesome >=0.5.7             :  1.0.2 (OK)
qtconsole >=5.0.3             :  5.0.3 (OK)
qtpy >=1.5.0                  :  1.9.0 (OK)
rtree >=0.8.3                 :  0.9.4 (OK)
setuptools >=39.0.0           :  54.2.0 (OK)
sphinx >=0.6.6                :  3.5.3 (OK)
spyder_kernels >=2.0.1,<2.1.0 :  2.0.1 (NOK)
textdistance >=4.2.0          :  4.2.1 (OK)
three_merge >=0.1.1           :  0.1.1 (OK)
watchdog                      :  1.0.2 (OK)
zmq >=17                      :  22.0.3 (OK)

# Optional:
cython >=0.21                 :  0.29.22 (OK)
matplotlib >=2.0.0            :  3.4.1 (OK)
numpy >=1.7                   :  1.19.3 (OK)
pandas >=1.1.1                :  1.2.3 (OK)
scipy >=0.17.0                :  1.6.2 (OK)
sympy >=0.7.3                 :  1.7.1 (OK)
```



Discussion:
on a fresh install, it seems to work as if a non-event.
![image](https://user-images.githubusercontent.com/4312421/113486742-9765fe00-94b4-11eb-9ca6-8ac4c5ad5452.png)

Hey @infiltratorChris, thanks for reporting. You said

> worked with numpy, pandas and matlibplot and then the kernel gave up and always gave me an 'ERROR: execution aborted'.

That could be an issue with your program running out of memory. In that case you need to restart the kernel and try again. If the problem persists, it means you need to check your program for memory related issues.

> I though id update to spyder 5 and then the spyder-kernel dependancy was totally off.

The reported problem with `spyder-kernels` was a mistake on our side and it'll be fixed in our next version, to be released in a couple of days. Thanks for your patience.

> I installed spyder-kernel with pip but the dependancy wasnt up dated accordingly.

Please be sure to use `spyder-kernels` 2.0.1 in your environment and ignore the warning we show about it in the meantime because it's irrelevant.

Resolving patch:
diff --git a/spyder/widgets/browser.py b/spyder/widgets/browser.py
--- a/spyder/widgets/browser.py
+++ b/spyder/widgets/browser.py
@@ -329,8 +329,9 @@ def createWindow(self, webwindowtype):
             pass
 
     def contextMenuEvent(self, event):
-        self.context_menu.popup(event.globalPos())
-        event.accept()
+        if self.context_menu:
+            self.context_menu.popup(event.globalPos())
+            event.accept()
 
     def setHtml(self, html, baseUrl=QUrl()):
         """


Test patch: