2014-07-17 33 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); 
相关问题