我试图让我的 Protractor 测试等待
一个条件,但我得到了不一致的行为。场景是这样的:
- 用户在搜索框中写了一些词
- debounced 事件被触发。因此,这取决于用户何时停止输入。
- 我们发出 API 请求,同时显示
正在加载
反馈并隐藏关闭按钮
。 - 反馈消失,
关闭按钮
重新出现,继续。
因此,为了实现这一点,我观察了关闭按钮
。在用户停止写入和 debounce 事件触发之间 close button
是可见的。在 debounced 事件触发后(我们正在发出请求),正在加载
元素显示,关闭按钮
隐藏 [1]。完成后 关闭按钮
再次显示。
非常感谢任何想法,谢谢!
1:为了简化测试,我让 close button
消失至少 200 毫秒,这样在本地主机上就不会超快消失。这应该没问题,因为 webdriver 每 100 毫秒轮询一次等待条件。
所以,这是我的测试:
it('should show "no results" feedback when there are no results', function () {
app.getHomepage();
app.topMenu.searchLink.click();
app.search.termsInput.sendKeys('chipijanders');
app.search.waitForSearch();
expect(app.search.noResults.isDisplayed()).toBe(true);
// Checking the waitForSearch consistency
for (var i = 0; i < 10; i++) {
app.search.closeLink.click();
app.topMenu.searchLink.click();
app.search.termsInput.sendKeys('chipijanders');
app.search.waitForSearch();
expect(app.search.noResults.isDisplayed()).toBe(true);
}
});
这里waitForSearch
:
waitForSearch: function () {
var self = this;
browser.driver.wait(function() {
return self.closeLink.isDisplayed().then(function (isDisplayed) {
return !isDisplayed;
});
});
browser.driver.wait(function() {
return self.closeLink.isDisplayed().then(function (isDisplayed) {
return isDisplayed;
});
});
}
最佳答案
最近遇到一个问题,等待下划线中的 decounced 方法。我使用的解决方案是像这样覆盖 protractor.conf 中的 _.debounced
onPrepare: function () {
var debounceRightNow = function () {
angular.module('debounceRightNow', []).run(
function () {
_.debounce = function (callback) {
return callback;
};
});
};
browser.addMockModule('debounceRightNow', debounceRightNow);
}
不确定这是否能回答您的问题,但这是一个不错的解决方案
关于angularjs - Protractor wait() 用于去抖动事件 + 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24609121/