selenium: [🐛 Bug]: selenium seems to override _, breaking another package
What happened?
I am facing a very difficult debugging situation, and I’ll gather as many information as I can.
We are using a package called shinyMatrix, together with an R shiny application. Everything is quite dynamic, with matrices widgets generated on the fly. We know that shinyMatrix uses, under the hood, Vue.
What I see is that if I run the test under selenium, and only under selenium, I get the following error in Chrome console
After some debugging and watch of the _ variable, I found that the following snippet of code seem to remap _ to a different function
It’s quite hard to say what’s going on, because it’s all minified. I was able to trace down that file to verbatim code part of the ruby bindings (I am using the python bindings):
grep -r "allowfullscreen allowpaymentrequest" *
rb/lib/selenium/webdriver/atoms/getAttribute.js:<SNIP> {"class":"className",readonly:"readOnly"},dd="allowfullscreen allowpaymentrequest allowusermedia async autofocus autoplay checked compact complete controls declare default defaultchecked defaultselected defer disabled ended formnovalidate hidden indeterminate iscontenteditable ismap itemscope loop multiple muted nohref nomodule noresize noshade novalidate nowrap open paused playsinline pubdate readonly required reversed scoped seamless seeking selected truespeed typemustmatch willvalidate".split(" ");ba("_",function(a,b){var<SNIP>
The resulting effect of the overwrite is that this function in shinymatrix is no longer able to find the lodash utility function cloneDeep:
I don’t know if this is a selenium problem, a Vue problem, a shiny problem, or a shinyMatrix problem. For now the most likely culprit seems to be selenium, but I might have to investigate further if you have more information about what’s going on.
How can we reproduce the issue?
Hard to reproduce without my full code, but I am using a very simple script:
import time
from selenium import webdriver
from uidriver.widgets.shiny import Selector, Tabset
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(2)
driver.get("http://localhost:8888")
time.sleep(10)
Selector(driver).id("redacted").select("2")
Selector(driver).id("redacted2").select("redacted")
Tabset(driver).index(1).click_tab("redacted")
time.sleep(1000)
The Selector and Tabset are basically classes I developed to simplify the access. In the end, they are fancy wrappers for a find_element with a By.XPATH and click(). The Tabset change should make the shinyMatrix appear, but the error actually occurs already at the point of the second selector.
Relevant log output
See above.
Operating System
macOS 13.5.1
Selenium version
selenium==4.11.2 on python 3.11
What are the browser(s) and version(s) where you see this issue?
Chrome 116.0.5845.110
What are the browser driver(s) and version(s) where you see this issue?
Downloaded by selenium
Are you using Selenium Grid?
No response
About this issue
- Original URL
- State: closed
- Created 10 months ago
- Reactions: 8
- Comments: 15 (10 by maintainers)
I’ve spent last 8h and lost 1532 hairs before I got to know about this issue. It’s a serious one, I must say.
PR ready to revert the change that caused the issue: https://github.com/SeleniumHQ/selenium/pull/12704
I reverted that change #12557, built locally, tested, and the issue disappeared.
I run into the same issue today. My tests fail after Selenium update with error saying that
_.functionName
is not a function. Everything works fine with Selenium 4.11.0 ruby gem. But updating to 4.12.0 seems to break it.Looks like
_
sign is overwritten by Selenium?