我有一个页面通过wijcombobox敲除绑定(http://wijmo.com/wiki/index.php/Using_Wijmo_with_Knockout)呈现wijmo组合框。由于测试运行和点击事件之间的竞争条件,我使用水豚进行测试时遇到了困难。可能还有其他竞争条件,但这是目前的一个让我失望的原因。这就是我目前的解决方法:
def click_on_combobox_till_options_appear
wait_until(10) do
page.find('.wijmo-wijcombobox-trigger').click
page.has_css?('.wijmo-wijlist-item')
end
end
我正在使用'kb-inject'来设置我的ViewModel绑定。
是否有我可以连接的javascript事件或我可以测试的属性,以指示applyBindings
已完成执行,以便我可以避免像上面那样的变通方法?
答案 0 :(得分:0)
在等待applyBindings
被呼叫方面,我们提出了以下解决方法。它不是很好,但应该作为解决类似问题的基础(将App
替换为有意义的命名空间):
def wait_for_ko_bindings
js = <<END_JS
$(function() {
ko.bindingHandlers.isLoadedForTests = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
App.ko_bindings_loaded_for_tests = true;
}
};
var viewModel = {};
var testNode = document.createElement('div');
testNode.innerHTML = '<div data-bind="isLoadedForTests:1"></div>';
document.body.appendChild(testNode);
kb.applyBindings(viewModel, testNode);
});
END_JS
page.execute_script(js)
wait_until do
page.evaluate_script('App.ko_bindings_loaded_for_tests === true')
end
end
特别是对于wijcombobox,我们发现以下工作:
def click_combobox
wait_until(10) do
page.find('.wijmo-wijcombobox-trigger').click
page.all('.wijmo-wijlist-item').length > 0
end
end