您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用Selenium或Protractor获取HTML中嵌套元素的文本以实现自动化?

如何使用Selenium或Protractor获取HTML中嵌套元素的文本以实现自动化?

ElementFinder.getText()调用innerHTML元素并删除前导和尾随空格,但innerHTML包括任何嵌套级别的所有子元素。DOM中没有特殊属性只能获取第一级文本,但是可以自己实现。DOM中的文本也是一个节点,并且以与任何标记元素相同的方式存储在DOM树中,只是具有不同的类型和属性集。我们可以使用属性获得所有类型元素的一级子级Element.childNodes,然后对其进行迭代并仅保留文本节点,然后连接其内容并返回结果。

在Protractor中,我决定向的原型中添加自定义方法ElementFinder以使其易于使用,因此任何Protractor元素都可以使用它。由您决定放置此扩展代码的位置,但是我建议您在测试之前将其包括protractor.conf.js中

protractor.ElementFinder.prototype.getTextContent = function () {
    // inject script on the page
    return this.ptor_.executeScript(function () {
        // note: this is not a Protractor scope

        // current element
        var el = arguments[0];
        var text = '';

        for (var i = 0, l = el.childNodes.length; i < l; i++) {
            // get text only from text nodes
            if (el.childNodes[i].nodeType === Node.TEXT_NODE) {
                text += el.childNodes[i].nodeValue;
            }
        }

        // if you want to exclude leading and trailing whitespace
        text = text.trim();

        return text; // the final result, Promise resolves with this value

    }, this.getWebElement()); // pass current element to script
};

方法将返回Promise,并使用text变量value进行解析。如何使用它:

var el = $('.desc');

expect(el.getTextContent()).toContain('Print this');

// or

el.getTextContent().then(function (textContent) {
    console.log(textContent); // 'Print this'
});
其他 2022/1/1 18:15:22 有498人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶