2015-07-25 15 views
5

Próbuję przetestować aplikację, która wyświetla wykresy za pomocą rikszy i d3. testy realizowane są za pomocą kątomierza i jaśminu. na marginesie, uważam, że pytanie nie jest tak naprawdę charakterystyczne dla tego przypadku użycia i jest bardziej ogólne.Pobierz tablicę różnych wartości tego samego elementu za pomocą kątomierza

, więc test ma najechać kursorem myszy na wykres i zebrać tekst, który jest wyświetlany dla każdego punktu (example). tablica ta jest następnie porównywana z daną tablicą.

Mam nadzieję Pseudokod ilustruje problem:

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'); 
}); 

więc, problemem jest to, że skoro muszę rozmiaru rozwiązać pierwszy, i nie ma sposobu, aby czekać na wszystkie obietnice, aby rozwiązać i powrotu szereg obietnic tekstowych, które można później wykorzystać za pomocą funkcji oczekiwać().

EDYCJA: wyraźnie wspomniany kątomierz/jaśmin.

Odpowiedz

3

Nie możesz po prostu użyć selenowego sterownika WWW 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'); 
    }); 
}); 

przejrzysty sposób:

zadeklarować go:

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); 
    }); 
    }); 

i używać go:

var hoverTextPromise = collectHoverText(graph); 
expect(hoverTextPromise).toContain('value'); // resolved array here 
+0

jest to różni od protractor.promise.all? – ilj

+0

Czy można to osiągnąć bez oddzwaniania? – ilj

+0

masz na myśli bez "wtedy"? robisz asynchroniczne wywołanie, będziesz potrzebował wywołania zwrotnego – mido

Powiązane problemy