gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:23 25 4
gpt4 key购买 nike

我有以下 HTML 代码。我需要控制台日志或仅打印 desc 类文本 - “Print this”,而不是 Protractor 或 Selenium 中的 spell 类文本。

<span class="desc">
Print this
<a class="new-link" href="#">
<span class="spell">And not this</span>
</a>
</span>

我尝试使用 getText() 但它使用以下代码打印了完整的语句 -

Print this And not this

在 Protractor 中使用 Javascript:

element(by.css('.desc')).getText().then(function(text){
console.log(text);
});

在使用 Java 的 Selenium 中:

System.out.println(driver.findElement(by.xpath('//*[@class=".desc"]')).getText());

如何只打印文本的第一部分(即“打印此”)?

任何建议或帮助将不胜感激?谢谢。

最佳答案

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

在 Protractor 中,我决定向 ElementFinder 的原型(prototype)添加自定义方法以使其易于使用,因此任何 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 变量的值解析。使用方法:

var el = $('.desc');

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

// or

el.getTextContent().then(function (textContent) {
console.log(textContent); // 'Print this'
});

关于javascript - 如何使用 Selenium 或 Protractor 获取 HTML 中嵌套元素的文本以实现自动化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32479422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com