2016-06-21 58 views
3

我正在爲具有非常標準頁面的應用程序編寫硒測試,該頁面可以輕鬆地由泛型結構作爲頁面基礎進行建模,只有少數幾種基本類型主要是包含記錄列表的列表頁面,以及編輯一個可以編輯一條記錄的頁面)。爲了模擬這個我有這兩個類:使用抽象方法提供特定返回值的未經檢查的轉換警告

public abstract class AbstractListPage<E extends EditPage> extends AbstractSelfOpeningPage implements ListPage { 

    // Provides the specific object for the edit page when it's opened 
    protected abstract E editPageHook(); 

    public E getEditPage() { 

     return editPageHook(); 
    } 

    public E openEditPage(String key, boolean search) { 

     //Do page opening stuff like clicking buttons 

     // Return new object for the page that has been opened 
     return getEditPage(); 
    } 
} 

// Implementation class 
public class DossiersListPage extends AbstractListPage<DossierPage> { 

    @Override 
    protected DossierPage<DossiersListPage> editPageHook() { 

     return new DossierPage<>(driver, this); 
    } 
} 

// Usage in test, this shows an unchecked cast warning 
DossierPage<DossiersListPage> dossierPage = new DossiersListPage(driver).openPage().openEditPage("3905"); 

我想知道是否有解決這個問題的好辦法,而且我缺少什麼?目前我沒有任何問題,但是我的測試代碼中的警告讓我感到有點不安。

之所以這裏的仿製藥是這樣我可以模擬返回他們屬於一個流暢的方式在頁面我的頁面上的元素:

public abstract class AbstractPageElement<P extends Page> implements PageElement<P> { 

    @Override 
    public P click() throws TimeoutException { 
     // Do click 
     return page; 
    } 
} 

// DossierPage 
public class DossierPage<L extends ListPage> extends AbstractEditPage<L> { 

    public OrderDate<DossierPage<L>> orderDate = new OrderDate<>(driver, this); 
    public OrderType<DossierPage<L>> orderType = new OrderType<>(driver, this); 
    public Status<DossierPage<L>> status = new Status<>(driver, this); 
} 

// Test 
dossierPage.orderDate.click() 
      .orderType.click() 
      .status.click(); 
+0

DossiersPage是帶有檔案列表的頁面,DossierPage是一個單一的檔案。也許命名有點混亂,當你不習慣它。 – Mobrockers

+0

你能說明'DossierPage'是如何聲明的嗎?我認爲這將是棘手的部分。 –

+0

我已經添加了DossierPage類標題,你還需要其他什麼嗎? – Mobrockers

回答

2

我可以對該問題進行逆向工程。 DossierPage必須看起來像這樣:

public class DossierPage<E extends AbstractListPage> extends EditPage { 
    //... 
} 

所以現在我們正在解決這個問題。你可以通過指定更多的類型參數來解決它:

public class DossiersListPage extends 
    AbstractListPage<DossierPage<DossiersListPage>> { // this is the tricky part 

    @Override 
    protected DossierPage<DossiersListPage> editPageHook() { 
     return new DossierPage<>(); 
    } 
    //... 
} 
+0

是否有理由讓您的代碼塊中有兩次相同的'DossiersListPage'?因爲你的答案似乎是一個錯誤。 – RemcoW

+0

確實。感謝編輯! :) –

-4

只需添加行給予警告以上下面一行:

@SuppressWarnings("unchecked") 
+0

我知道我可以壓制這個警告。我想找到更好的方式來做我想做的事。 – Mobrockers

+1

這不是一個解決方案。這就像鴕鳥一樣把你的頭伸進沙裏,假裝問題不存在。 – RemcoW

相關問題