ilj*_*ilj 5 javascript promise jasmine selenium-webdriver protractor
我正在尝试使用人力车和d3测试显示图形的应用程序.使用量角器和茉莉花实现测试.作为旁注,我认为这个问题并不是特定于这个用例,而且更为通用.
因此,测试应该将鼠标悬停在图形上并收集为每个点显示的文本(示例).然后将该数组与给定数组进行匹配.
我希望这个伪代码说明问题:
var graph = ... //
var promises = [];
var promise = graphElement.getSize().then(function(size){
_.times(size, function(i) {
moveMouse(i, 0); // move mouse to i-th pixel
promises.push(graph.element(by.css('.hover-text')).getText());
});
return promises;
});
promise.magicallyWaitForAllOfThem();
_.each(promises, function(textPromise){
expect(textPromise).toBe('something');
});
Run Code Online (Sandbox Code Playgroud)
所以,问题是因为我需要首先解析大小,我没有办法等待所有的promises解析并返回一个文本promise的数组,以后可以与expect()一起使用.
编辑:明确提到量角器/茉莉花.
你不能简单地使用 selenium webdriver 吗promise.all
?
var graph = ... //
var webdriver = require("selenium-webdriver");
graphElement.getSize().then(function(size){
var promises = [];
_.times(size, function(i) {
moveMouse(i, 0); // move mouse to i-th pixel
promises.push(graph.element(by.css('.hover-text')).getText());
});
return webdriver.promise.all(promises);
}).then(function(promiseResultArray){
_.each(promiseResultArray, function(textPromise){
expect(textPromise).toBe('something');
});
});
Run Code Online (Sandbox Code Playgroud)
更清洁的方式:
声明它:
collectHoverText: function(elem) {
var strings = [];
var promises = [];
return elem.getSize().then(function(size) {
_.times(0/*logic for number of steps*/, function(i) {
var x = 0; // logic for step
browser.actions().mouseMove(elem, {x: x, y: 0}).perform();
promises.push(elem.element(by.css('.hover-text')).getText().then(function(text) {
strings.push(text);
}));
});
return protractor.promise.all(promises).then(function() {
return _.uniq(strings);
});
});
Run Code Online (Sandbox Code Playgroud)
并使用它:
var hoverTextPromise = collectHoverText(graph);
expect(hoverTextPromise).toContain('value'); // resolved array here
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
479 次 |
最近记录: |