我正在尝试弄清楚 WebDriverJs 中的循环如何与 Promise 一起工作。
假设您有以下 html:
<div id="textelements">
<span onclick="spanClicked('Rock')">Rock</span>
<span onclick="spanClicked('Paper')">Paper</span>
<span onclick="spanClicked('Scissors')">Scissors</span>
</div>
使用 WebDriverJs 我想找到带有文本“剪刀”的跨度并单击它。
最简单的事情是确保源 html 具有适当的标识符,但是说不能更改,WebDriverJs 代码会是什么样子给定上面的 html。
我尝试了以下方法:
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');
true
问题是,即使它应该设置为 true,但在评估时匹配不等于。
任何想法发生了什么?