我想使用Rx.js映射正确的序列。 最简单的例子是使用键盘。我将Rx.js附加到键盘事件并等待三个A,无论它们之间是什么,除了Q.当序列匹配时,我想在控制台上打印OK。 例如:
我应该使用过滤功能并保持状态吗?或者有一种更为有效的方法。
答案 0 :(得分:3)
您应该可以使用filter
和scan
运算符来执行您想要的操作:
Rx.Observable.from("AsssAqweAbAAQAAA")
// Only A and Q characters are important:
.filter(char => (char === "A") || (char === "Q"))
// Accumulate the A characters until there are three
// or until a Q is received:
.scan((acc, char) => {
if ((char === "Q") || (acc.length === 3)) {
acc = [];
}
if (char === "A") {
acc.push(char);
}
return acc;
}, [])
// Filter the accumulated characters until there
// are three:
.filter(acc => acc.length === 3)
.mapTo("OK")
.subscribe(value => console.log(value));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
答案 1 :(得分:1)
您可以使用JavascriptExecutor executor = (JavascriptExecutor)driver; executor.executeScript("document.getElementById('ITEM_SMOOTHING_DEFAULT-value').blur();");
executor.executeScript("document.getElementById('ITEM_SMOOTHING_DEFAULT-value').focus();");
WebElement toolTipElement = driver.findElement(By.className("tooltip"));
进行尝试 - 但我不确定您的示例是否已经简化,实际上有点复杂,但这可能会有所帮助:
bufferCount
&#13;
const source$ = Rx.Observable.from("aaqassaaassaaa");
source$.bufferCount(3, 1)
// .do(console.log) // uncomment to see the processed data
.filter(data => data.join("") === "aaa") // your detection-logic
.mapTo("Ok")
.subscribe(console.log);
&#13;