【问题标题】:Why is getText() in Selenium not working for <textarea> elements, but getAttribute("value") is?为什么 Selenium 中的 getText() 不适用于 <textarea> 元素,但 getAttribute("value") 是?
【发布时间】:2015-11-29 12:34:40
【问题描述】:

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

<textarea name="txtComment" id="txtComment" rows="2" cols="20">
    Some comment inside the textarea
</textarea>

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

那为什么getText()不起作用

driver.findElement(By.id("txtComment")).getText();

它只返回一个空字符串

但是使用 getAttribute("value") 有效并导致返回预期的字符串:

driver.findElement(By.id("txtComment")).getAttribute("value");

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

这是相当令人惊讶的,因为关于 getText() 的 Selenium 文档说如下:

获取该元素的可见(即未被CSS隐藏)的innerText, 包括子元素,没有任何前导或尾随空格。

返回: 此元素的 innerText。

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

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

【问题讨论】:

  • 因为 getText 返回一个文本节点。输入和 textarea 元素文本存储在 value 属性中,因此您需要检索“value”属性的数据。
  • 是的,但是当我使用某些浏览器的开发工具(即 firefox)时,我看到了我的问题中发布的代码 -> 所以它似乎是一个文本节点,不是吗?跨度>
  • 这能回答你的问题吗? Selenium getText

标签: java html selenium selenium-webdriver


【解决方案1】:

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

driver.find_element_by_id("txtComment").text
driver.find_element_by_id("txtComment").get_attribute("value")

文本区域内的一些评论。

【讨论】:

  • 但表单input 元素并非如此(用于实际用户输入)
  • .text真的得到textarea的内文吗?我希望.text 总是返回一个空字符串。你在什么上测试它(包括版本)?
【解决方案2】:

使用 Webdriverio (WDIO) 尝试了同样的事情。

getText() 不适用于 Textarea。返回空字符串。

使用 getValue() 代替,为我工作。返回确切的字符串。

&lt;textarea id="txtAreaDescription" maxlength="2500" class="css-pqtyuc"&gt;Auto_Internal_Note_Description&lt;/textarea&gt;

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2019-02-03
    • 2016-02-15
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多