getAttribute("value") 不适用于驱动程序 91.0.4472.19 和 Chrome 91.0.4472.77

问题描述

在 Chrome 和驱动程序更新到第 91 版后,我发现驱动程序为 91.0.4472.19 (win32) 的 VBA 宏变成了来自输入标签“值”属性的返回空字符串 (""):

Dim ch As SeleniumWrapper.WebDriver
Dim el As WebElement
' some code here ...
ch.findElementById("htmlLoginId").SendKeys login
Set el = ch.findElementById("htmlLoginId")
txt = el.getAttribute("value")

使用较旧的驱动程序版本 90.0.4430.24,这可以正常工作。希望它会在下一个驱动程序版本中修复。

还有其他方法可以从 input[type=text] 标签获取价值吗?如果这个错误不会在第 92 个版本中修复并且第 90 个驱动程序版本变得不兼容,我想避免这种情况。

解决方法

我们做到了!

ARG CHROME_VERSION="90.0.4430.212-1"
RUN wget --no-verbose -O /tmp/chrome.deb https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}_amd64.deb \
  && apt install -y /tmp/chrome.deb \
  && rm /tmp/chrome.deb
./webdriver-manager update --versions.chrome 90.0.4430.24
,

自从新的 chrome 驱动程序问世以来,我们一直在努力解决这个问题。如果我们想要检索元素的属性(不是 html 属性),我们采取的解决方法是绕过对 webdriver 的 getAttribute 方法的调用,而是使用以下自定义脚本:

browser.executeScript(`return arguments[0].${this.textAttribute}`,el);

上面的例子适用于我们正在使用的量角器。如果您的堆栈不同,您需要调用 browser.executeScript 的适当替代方案,但脚本本身将完全相同。

,

这是 chrome 驱动程序 91 中的一个回归。已进行修复。希望尽快发布更新的 v91 chrome 驱动程序。

https://bugs.chromium.org/p/chromium/issues/detail?id=1205107

与此同时,我们使用的是 chrome 驱动程序 90。

,

我也在用 getAttribute('innerHTML') 重现这个。作为另一种解决方法,使用 Firefox 而不是 Chrome 运行测试

,

在 C# 中使用 Web 元素的 GetAttribute() 获取元素的属性数据时,我们也面临类似的问题。挣扎了两天,找出根本原因是什么。对我们来说,由于代码库已经冻结,因此无法进行变通。等待修复。根据问题 https://bugs.chromium.org/p/chromium/issues/detail?id=1205107 可能需要几周时间才能发布具有修复功能的另一个版本。

该问题已在 ChromeDriver 91.0.4472.101ChromeDriver 92.0.4515.43

的新版本中得到解决