2014-09-16 14 views
5

Tôi có một trang web đáp ứng và muốn tách ra khỏi những mối quan tâm về việc liệu các bộ phận của mẫu trang của tôi đang sụp đổ từ nội dung chính mỗi trang:trang với Groovy Soạn Geb đặc điểm mà

trait DesktopPage { 
    static content = { 
     header { $('nav', id:'nav-container') } 
    } 
} 

trait MobilePage { 
    // other stuff 
} 

trait HomePage { 
    static url = '' 
    static at = { title == 'My Site' } 
} 

class DesktopHomePage extends Page implements DesktopPage, HomePage {} 

Tuy nhiên, Geb thời gian chạy dường như không thu thập các khối mô tả static tắt các đặc điểm, thay vào đó hoạt động như thể chúng không có mặt.

Có thể tạo các mối quan tâm như thế này bằng cách sử dụng ngầm các đặc điểm với Geb không? Nếu không, liệu có một cú pháp cho phép tôi lấy thông tin từ các đặc điểm đã được triển khai? HomePage.at không giải quyết được.

+0

Điều gì xảy ra nếu bạn xóa 'tĩnh' trong các đặc điểm? – Will

+0

@WillP Không hoạt động với thành ngữ Geb. Nó có một DSL riêng cho những bit được lấy cảm hứng từ Grails. – chrylis

+0

Ngoài sự tò mò: thực hiện các thay đổi hành vi theo bất kỳ cách nào nếu bạn khai báo các đặc điểm đó dưới dạng giao diện? – Will

Trả lời

1

Nếu bạn nhìn vào documentation on traits and static fields, bạn sẽ nhận thấy rằng nó đề cập rõ ràng rằng việc trộn vào một đặc điểm tuyên bố trường tĩnh không thêm trường vào lớp. Geb được tạo ra theo cách trước khi các đặc điểm được thêm vào Groovy, do đó việc sử dụng chúng để tạo trang chắc chắn không được tính đến khi thiết kế API.

Nếu url và tại trình kiểm tra giống nhau cho cả hai trang và chỉ nội dung khác giữa phiên bản dành cho thiết bị di động và máy tính để bàn, tại sao bạn không chỉ sử dụng thừa kế?

class HomePage { 
    static url = '' 
    static at = { title == 'My Site' } 
} 

class DesktopHomePage extends HomePage { 
    static content = {...} 
} 

class MobileHomePage extends HomePage { 
    static content = {...} 
} 
Các vấn đề liên quan