Protractor: element.getText() 返回的是对象而非字符串

在使用 Protractor 进行前端自动化测试时,我们常常需要获取页面元素的文本信息。其中一个获取文本的方法是 element.getText()。但是,在某些情况下,我们可能会发现该方法返回的并不是字符串,而是一个包含字符串的对象。这篇文章将介绍为什么会出现这种情况,并提供解决方案。

问题原因

Protractor 是基于 WebDriver 的一种测试框架,而 WebDriver 的设计理念就是通过 JavaScript 对浏览器进行操作。当使用 element.getText() 方法时,实际上是通过 WebDriver 将元素的 innerText 属性值读取到了 JavaScript 环境中。而在某些情况下,比如元素内容中有换行符、空格等特殊字符时,JavaScript 解析 innerText 的过程中会产生错误,导致返回的结果是一个对象而非字符串。

例如,假设我们有以下 HTML 代码:

---- ------------
    ---- --
    - ---------
    -----
------

如果我们使用 element(by.id('my-div')).getText() 方法来获取该元素的文本信息,那么得到的结果将是一个包含多个字符串的数组,而非单独的字符串。因为浏览器解析 innerText 属性时,将文本内容按照换行符进行了分割。具体的结果将类似于以下内容:

-
    ----- ----
    -- -----------
    -------
-

解决方案

针对上述问题,我们可以借助 Array.join() 方法将多个字符串拼接成单一的字符串。具体来说,我们可以通过以下代码获取元素的文本信息并转换为字符串:

------------------------------------------------ ------ -
    --- ----------- - ------------------- - --------------- - -----
    -------------------------
---

在该代码中,我们首先使用 getText() 方法获取元素的文本信息,然后判断返回值是否是数组。如果是,则使用 Array.join() 方法将其拼接成单一的字符串;否则直接使用返回值作为字符串。最后,我们打印出这个字符串。

结论

在使用 Protractor 进行前端自动化测试时,element.getText() 方法有可能返回一个对象而非字符串。这种情况通常发生在元素文本内容包含特殊字符时。为了解决这个问题,我们可以使用 Array.join() 方法将返回的字符串数组拼接成单一的字符串。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/26205