2016-03-29 13 views
12

Tôi muốn sử dụng các kiểm tra giao diện người dùng Xcode với Fastline Snapshot để tạo ảnh chụp màn hình của ứng dụng Cordova. Về cơ bản, vì toàn bộ ứng dụng của tôi chỉ là chế độ xem web, tất cả các phương thức trợ giúp thử nghiệm giao diện người dùng xcode trở nên không liên quan và tôi chỉ muốn nhấn vào các điểm cụ thể, ví dụ: tap(x: 10, y: 10) nên tạo vòi tại điểm {10px; 10px}.Cách chạm vào một điểm cụ thể bằng cách sử dụng Xcode UITests

Điều đó có lẽ rất đơn giản, nhưng tôi không thể tìm ra cách thực hiện.

Cảm ơn.

Trả lời

18

Bạn có thể nhấn vào một điểm cụ thể với XCUICoordinate API. Rất tiếc, bạn không thể chỉ nói "nhấn 10,10" tham chiếu tọa độ pixel. Bạn sẽ cần phải tạo ra các phối hợp với một tương đối bù đắp cho một cái nhìn thực tế.

Chúng tôi có thể sử dụng chế độ xem web được đề cập để tương tác với toạ độ tương đối.

let app = XCUIApplication() 
let webView = app.webViews.element 
let coordinate = webView.coordinateWithNormalizedOffset(CGVector(dx: 10, dy: 10)) 
coordinate.tap() 

Side lưu ý, nhưng bạn đã cố gắng tương tác với quan điểm trên web trực tiếp? Tôi đã có rất nhiều thành công khi sử dụng app.links["Link title"].tap() hoặc app.staticTexts["A different link title"].tap(). Here's a demo app I put together demonstrating interacting with a web view.


Cập nhật: Như Michal W. chỉ ra trong các ý kiến, bây giờ bạn có thể gõ một phối hợp trực tiếp, mà không lo lắng về bình thường bù đắp.

let normalized = webView.coordinateWithNormalizedOffset(CGVector(dx: 0, dy: 0)) 
let coordinate = normalized.coordinateWithOffset(CGVector(dx: 10, dy: 10)) 
coordinate.tap() 

Lưu ý rằng tôi chuyển 0,0 đến vectơ chuẩn hóa và sau đó là điểm thực, 10,10, cho lần gọi thứ hai.

+1

Tôi không chắc điều đó là chính xác khi tôi cần thêm 'coordinateWithOffset' để thực hiện x/y tap: cho phép cooridnate = self.coordinateWithNormalizedOffset (CGVector (dx: 0 , dy: 0)). coordinateWithOffset (CGVector (dx: position.x, dy: position.y)) cooridnate.tap() https://forums.developer.apple.com/thread/13373 –

+0

Ý tưởng hay! Cảm ơn @ MichałW. Tôi đã lưu ý nhận xét trong bản cập nhật cho câu trả lời vì nó đã được chấp nhận. –

8

@joe Để đi xa hơn một chút so với cách tiếp cận của Joe Masilotti, tôi đặt tên tôi vào một số extension và cung cấp cụm từ tiền đề cho các thông số toàn cầu và cục bộ.

func tapCoordinate(at x xCoordinate: Double, and y yCoordinate: Double) { 
    let normalized = app.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0)) 
    let coordinate = normalized.withOffset(CGVector(dx: xCoordinate, dy: yCoordinate)) 
    coordinate.tap() 
} 

Bằng cách đưa ra một cái tên mang tính chất toàn cầu tôi có thể dễ dàng hiểu được dụ ví dụ:

tapCoordinate(at x: 100, and y: 200) 
+0

Làm việc cho tôi trong Swift 3! – mmd1080

+0

Điều này không biên dịch trong Swift 3 –

0
<something>.coordinate(withNormalizedOffset: CGVector.zero).withOffset(CGVector(dx:10,dy:60)).tap() 

Pass (0,0) để vector bình thường và sau đó là điểm thực tế (10 , 10)

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