无法在测试方法中使用页面对象。 (TestNG的)

时间:2017-03-19 15:10:13

标签: webdriver testng pom.xml

我是自动化新手的人。我目前正在学习使用JAVA的Selenium Webdriver以及Page Object Model模式。当我尝试使用几行代码时,我自己就陷入了困境。我为页面元素创建了一个单独的类文件,其中包含以下代码。

    public class SamplePage {

    WebDriver Driver;

    public WebElement Gmail_Email_TextBox = Driver.findElement(By.xpath(".//*[@id='Email']"));

    public WebElement Gmail_Email_Next_Button = Driver.findElement(By.xpath(".//*[@id='next']"));

    public SamplePage(WebDriver Driver) { //This is a constructor.

        System.out.println("Constructor");

        this.Driver = Driver;
    }
}

当尝试在另一个类中调用上面的页面时,我得到java.lang.NullPointerException。请找到下面的代码。

    public class SampleTestMethod {

    WebDriver Driver;

    @BeforeMethod
    public void BrowserLaunch() throws InterruptedException {

        Driver = Browser.LaunchMozillaFirefox("https://accounts.google.com/ServiceLogin?continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&sacu=1&rip=1");

    }

    @Test
    public void TestCase1() {

        SamplePage Sample1 = new SamplePage(Driver);

        Sample1.Gmail_Email_TextBox.click();

    }
}

请在此澄清我。根本没有调用构造函数。这就是我所观察到的。

1 个答案:

答案 0 :(得分:1)

Gmail_Email_TextBoxGmail_Email_Next_Button等类字段在构造函数调用之前被评估为null ,之后从未更改过。这就是原因。

简单地说:在不同的地方初始化这些字段。

您可以为每个注释添加@FindBy注释,然后只使用PageFactory

SamplePage samplePage = new SamplePage();
PageFactory.initElements(driver, samplePage);

Further info on this.

遵循命名约定并使用camelCase

在构造函数调用之前初始化实例变量。 看看这个就自己看看:

public class Example {

    private String instanceVariable;
    private String anotherInstanceVariable = instanceVariable + " appended.";

    public Example(String instanceVariable) {
        this.instanceVariable = instanceVariable;
    }

    public static void main(String[] args) {
        Example example = new Example("The first one");
        System.out.println(example.anotherInstanceVariable);
    }
}

instanceVariable就像您的driveranotherInstanceVariable就像您的WebElement一样。