为什么没有静态定义的非静态引用错误?

时间:2014-07-17 11:03:38

标签: java unit-testing junit4

我不明白为什么错误“非静态方法getLoginPage()无法从静态上下文引用”这里!?这里没有任何静态!似乎微不足道,但我不确定我错过了什么。

修改 我明白通过实例化TestFramework,我可以摆脱错误但是按照建议,我试图避免在我的单元测试中实例化对象,并在需要时将对象创建传递给我的框架。另一方面,在TestFramework中使getLoginPage()静态,在我的TestFramework类中创建了一大堆类似的错误!

Class 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));
}

Class 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);
    }
}

3 个答案:

答案 0 :(得分:3)

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

该行TestFramework不是实例,编译器将其视为静态类型。创建TestFramework的实例并调用方法。

您可能需要

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

答案 1 :(得分:1)

TestFramework如果不是静态上下文(它是一个类,而不是一个实例)。

答案 2 :(得分:1)

您正尝试使用类名而不是实例来调用该方法。

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

像这样做了

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