为什么 Selenium 中的 getText() 不适用于 <textarea> 元素,而 getAttribute("value") 却可以?

drk*_*hng 5 html java selenium selenium-webdriver

假设您有一些带有 textarea 元素的 HTML,并且希望通过 Selenium(此处为 Java 绑定)获取其文本。

\n
<textarea name="txtComment" id="txtComment" rows="2" cols="20">\n    Some comment inside the textarea\n</textarea>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

这就是我通过开发人员工具(Internet\xc2\xa0Explorer 和 Firefox)查看代码的方式,因此看起来它是一个普通的文本节点,而不是在元素的“value”属性内。

\n

为什么getText() 不起作用

\n
driver.findElement(By.id("txtComment")).getText();\n
Run Code Online (Sandbox Code Playgroud)\n

它只返回一个空 String

\n

但是使用getAttribute("value") 可以工作并返回预期的字符串:

\n
driver.findElement(By.id("txtComment")).getAttribute("value");\n
Run Code Online (Sandbox Code Playgroud)\n

将按预期返回“文本区域内的一些评论”

\n

这是相当令人惊讶的,因为 Selenium 文档中有关getText()的内容如下:

\n
\n

获取此元素的可见(即未被 CSS 隐藏)innerText,\n包括子元素,不带任何前导或尾随空格。

\n

返回:\n该元素的内部文本。

\n
\n

正如开头的 HTML 代码所示,元素的文本部分是可见的,它是“innerText”,不是吗?

\n

有人可以阐明我错在哪里,或者如果我没有,为什么在 Selenium 中这样实现?

\n

Mah*_*bas 2

在 Python 中,它给出相同的结果:

driver.find_element_by_id("txtComment").text
driver.find_element_by_id("txtComment").get_attribute("value")
Run Code Online (Sandbox Code Playgroud)

文本区域内的一些评论。