2014-07-17 31 views
1

我不明白爲什麼錯誤「非靜態方法getLoginPage()不能從靜態上下文中引用」在這裏!?這裏沒有任何靜態的!似乎微不足道,但我不知道我錯過了什麼。爲什麼非靜態引用錯誤,而沒有靜態定義?

編輯: 據我瞭解,通過實例TestFramework我可以擺脫錯誤的,但作爲推薦,我試圖避免在我的單元測試實例化對象,如果需要傳遞對象創建我的框架。另一方面,使TestFramework中的getLoginPage()成爲靜態的,在我的TestFramework類中創建了一大堆類似的錯誤!

類Tests.java:

public class Tests { 

@Test 
public void User_Can_Login(){ 
    String username = "Jake"; 
    String password = "Jake"; 
    TestFramework.getLoginPage().Login(username, password); 
    assertTrue(TestFramework.getLoginPage().CheckIfLoggedIn(username)); 
} 

類TestFramework.Java:

public class TestFramework { 

private LoginPage loginPage; 

public LoginPage getLoginPage() { 
    loginPage = new LoginPage(); 
    PageFactory.initElements(Browser.getDriver(), loginPage); 
    return loginPage; 
} 

public class LoginPage { 

    String Url = "http://localhost:8080"; 
    String welcomeMsg = "Welcome"; 

    public void Login(String username, String password) { 
     Browser.Goto(Url); 
     Browser.Input(username,password); 
     Browser.Submit(); 
    } 
    public boolean CheckIfLoggedIn(String user){ 
     return Browser.getTextByxpath("/html/body/header/div/p").contains(welcomeMsg + " " + user); 
    } 
} 
+0

可能是因爲你沒有TestFramework的情況下... – Ordous

+0

'getLoginPage()'方法也不是一成不變的。所以你不能像'TestFramework.getLoginPage()'調用。您需要創建對象'new TestFramework()。getLoginPage();' –

+2

在附註中,您可能希望引用Java命名約定,即以小寫字母開頭的方法名稱,無下劃線等 – JamesB

回答

3
TestFramework.getLoginPage().Login(username, password); 
在該行 TestFramework

沒有一個實例,並且編譯器假設它作爲一個靜態類型。創建一個TestFramework的實例並調用該方法。

您可能需要

TestFramework tfWork = new TestFramework(); 
tfwork.getLoginPage().Login(username, password); 
assertTrue(tfWork.getLoginPage().CheckIfLoggedIn(username)); 
+0

這似乎是這種情況,但我試圖避免實例化我的測試類中的對象,因爲它不被推薦。這是否意味着我需要將我的框架中的所有內容都變成靜態的,以便能夠從我的單元測試中調用它? –

+0

@SabaAhang把所有東西都變成靜態不是一個好主意。請記住,靜態方法中使用的變量和方法也是靜態的。不要那樣做。使用實例。 –

1

什麼TestFramework如果不是一個靜態的情況下(這是一個類,而不是一個實例)。

1

您正嘗試使用類名稱而不是實例調用該方法。

TestFramework.getLoginPage().Login(username, password); 

insted的做這樣的

new TestFramework().getLoginPage().Login(username, password); 
相關問題