2015-02-14 14 views
6

chcę kliknąć na określonym miejscu mojego canvas elementu, więc napisałem następujący kod Kątomierz:Kliknięcie na podanych współrzędnych elementu w kątomierz

var canvas = element(by.id("canvas")); 

var clickCanvas = function(toRight, toBottom) { 
    browser.actions() 
    .mouseMove(canvas, -toRight, -toBottom) 
    .click(); 
} 

toRight/toBottom to liczba pikseli w których kliknięcie powinien być wykonany w stosunku do lewego górnego rogu mojego płótna.

Jednak kliknięcie nie wydaje się być wykonywane przy zadanych współrzędnych. Dostałem fragment z related question na temat kontroli jakości oprogramowania & Wymiana stosu testowego.

Czy możesz potwierdzić, że ten fragment kodu działa?
Czy możesz zaproponować alternatywy?

+0

Czy zaglądałeś do ['browser.executeScript()'] (http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.prototype.executeScript) w ogóle? – Aaron

+0

Musisz '.perform()' akcja. – LeeGee

Odpowiedz

2

przegapiłeś .Przeprowadzić()

browser.actions().mouseMove(canvas, -toRight, -toBottom).click().perform();

Używam tego kilka razy w moich testów i potwierdzić to działa

15

Zrobiłem tę pracę, przekazując obiekt reprezentujący współrzędnych jako drugi argument mouseMove:

var canvas = element(by.id("canvas")); 

var clickCanvas = function (toRight, toBottom) { 
    browser.actions() 
     .mouseMove(canvas, {x: toRight, y: toBottom}) 
     .click() 
     .perform(); 
}; 
+0

To była część obiektu, która sprawiła, że ​​zadziałało. Dzięki! – jsuser

+0

Jeśli uważasz, że moja odpowiedź rozwiązała Twój problem, możesz go zaakceptować. :) – Olov

+0

Nie zadałem tego pytania, przepraszam, nie mogę przyjąć tego jako odpowiedź. – jsuser

1

W tym przypadku masz brakowało perform() zadzwoń:

browser.actions() 
    .mouseMove(canvas, -toRight, -toBottom) 
    .click(); // < no .perform() HERE 

Jest to jeden z typowych błędów podczas pisania testów e2e w Kątomierz/WebDriverJS.

Aby uniknąć tych błędów od tego wydarzenia, jest eslint-plugin-protractor wtyczki do ESLint że would warn you jeśli perform() nie padł na browser.actions() łańcuchu.

Powiązane problemy