2015-02-14 14 views
6

Tôi muốn bấm vào một địa điểm cụ thể của nguyên tố canvas tôi, vì vậy tôi đã viết mã thước đo sau:Nhấp vào tọa độ nhất định của phần tử trong thước đo

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

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

toRight/toBottom là số lượng pixel nơi nhấp chuột nên được thực hiện, tương đối góc trên cùng bên trái của canvas của tôi.

Tuy nhiên, nhấp chuột dường như không được thực hiện tại các tọa độ nhất định. Tôi đã nhận đoạn mã từ số related question về Đảm bảo chất lượng phần mềm & Trao đổi ngăn xếp thử nghiệm.

Bạn có thể xác nhận rằng đoạn mã này hoạt động không?
Bạn có thể đề xuất các giải pháp thay thế không?

+0

Bạn đã xem ['browser.executeScript()'] (http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.prototype.executeScript) chưa? – Aaron

+0

Bạn cần '.perform()' hành động. – LeeGee

Trả lời

2

bạn bỏ lỡ .perform()

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

tôi sử dụng này một vài lần trong các thử nghiệm của tôi và xác nhận công trình này

15

tôi đã thực hiện công việc này, đi qua một đối tượng đại diện cho phối hợp như Lập luận thứ hai của mouseMove:

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

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

Đó là phần đối tượng làm cho nó hoạt động cho tôi. Cảm ơn! – jsuser

+0

Nếu bạn nghĩ rằng câu trả lời của tôi đã giải quyết được vấn đề của bạn, bạn có thể chấp nhận nó. :) – Olov

+0

Tôi không đặt câu hỏi, vì vậy xin lỗi, không thể chấp nhận câu trả lời. – jsuser

1

trong trường hợp này, bạn đã bỏ lỡ perform() gọi:

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

Đây là một trong những sai lầm phổ biến khi viết kiểm tra e2e trong Thước đo góc/WebDriverJS.

Để ngăn chặn các lỗi này xảy ra, có một plugin eslint-plugin-protractor-ESLint rằng would warn you nếu perform() đã không kêu gọi browser.actions() chuỗi.

Các vấn đề liên quan