gpt4 book ai didi

javascript - 如何遍历 webdriverjs 元素直到元素具有文本值

转载 作者:行者123 更新时间:2023-11-30 07:58:26 27 4
gpt4 key购买 nike

我正在尝试弄清楚 WebDriverJs 中的循环如何与 promises 一起工作。

假设您有以下 html:

  <div id="textelements">
<span onclick="spanClicked('Rock')">Rock</span>
<span onclick="spanClicked('Paper')">Paper</span>
<span onclick="spanClicked('Scissors')">Scissors</span>
</div>

我想使用 WebDriverJs 找到带有文本“Scissors”的跨度并单击它。

最简单的方法是确保源 html 具有适当的标识符,但假设无法更改,给定上面的 html,WebDriverJs 代码会是什么样子。

我尝试了以下方法:

function clickElementWithText(driver, textValue) {
driver.findElements(webdriver.By.css('#textelements span')).then(function(spans) {
for (var i = 0; i < spans.length; i++) {
var matched = spans[i].getText().then(function(text) {
console.log('Text value is: ' + text);
return text === textValue;
});
console.log(matched);
if (matched === true) {
console.log('clicking!');
spans[i].click();
return;
}
}
});
}

var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
driver.get('http://webdriverjsdemo.github.io/');
clickElementWithText(driver, 'Scissors');

问题是 matched 在评估时不等于 true,即使它应该设置为 true。

知道发生了什么事吗?

最佳答案

我们如何使用一些函数式编程来简化它,filter() function :

var spans = driver.findElements(webdriver.By.css('#textelements span'));
webdriver.promise.filter(spans, function(span) {
return span.getText().then(function(text) {
console.log('Text value is: ' + text);
return text === textValue;
});
}).then(function (filteredSpans) {
filteredSpans[0].click();
});

或者,一个“不太酷”的解决方案,但更直接的方法是使用 By.xpath:

var span = driver.findElement(webdriver.By.xpath('//*[@id = "textelements"]//span[. = "' + textValue + '"]'));
span.click();

或者,我们也可以用By.css检查onclick属性值:

var span = driver.findElement(webdriver.By.css('#textelements span[onclick*="' + textValue + '"]'));
span.click();

关于javascript - 如何遍历 webdriverjs 元素直到元素具有文本值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502757/

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