我不明白爲什麼錯誤「非靜態方法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);
}
}
可能是因爲你沒有TestFramework的情況下... – Ordous
'getLoginPage()'方法也不是一成不變的。所以你不能像'TestFramework.getLoginPage()'調用。您需要創建對象'new TestFramework()。getLoginPage();' –
在附註中,您可能希望引用Java命名約定,即以小寫字母開頭的方法名稱,無下劃線等 – JamesB