selenium结构化模式java

selenium结构化模式java,java,design-patterns,selenium,junit,automation,Java,Design Patterns,Selenium,Junit,Automation,我对Selenium很陌生,但有很好的编码经验 我正在研究非常复杂的web应用程序的自动化。 对于我的测试,我使用junit框架 我不希望我的类扩展到巨大的规模,所以这就是我如何划分每页的自动化。例如,我有主页。从它我可以得到设置,仪表板和许多其他页面。所以,所有与主页相关的修改/功能我都保留在主页类中。然后,对于下一个页面,我有另一个类,我在其中创建webdriver并将其分配给上一个页面webdriver。同样,每个类都反映了我在特定页面上可以实现的功能 假设我有一个第四级页面,我会有一个第

我对Selenium很陌生,但有很好的编码经验

我正在研究非常复杂的web应用程序的自动化。 对于我的测试,我使用junit框架

我不希望我的类扩展到巨大的规模,所以这就是我如何划分每页的自动化。例如,我有主页。从它我可以得到设置,仪表板和许多其他页面。所以,所有与主页相关的修改/功能我都保留在主页类中。然后,对于下一个页面,我有另一个类,我在其中创建webdriver并将其分配给上一个页面webdriver。同样,每个类都反映了我在特定页面上可以实现的功能

假设我有一个第四级页面,我会有一个第四级的类,在创建时会转到创建第三级页面,第三级会创建第二级第一个ans,依此类推,在某个时候我会进入第一个登录页面。基本上我有一棵树,树的顶端有我的登录页

它工作得很好,在junit出现之前,我对它没有任何问题。 我喜欢在我的@课后关闭浏览器的想法,我有不同的页面类。。无论我在测试中创建和使用什么类页面,我的after方法都是关闭浏览器,我如何才能将它们结合在一起呢


谢谢

做到这一点的最佳方法是在所有测试扩展的类中使用
After
方法。例如:

Class A extends T
Class B extends T

Class T {
    WebDriver driver;

    @After
    public void tearDown() {
        driver.quit();
    }
}
现在,当您的
A#testMethod1
完成时,它将从继承的
@After
方法执行
tearDown()

另外,就您的页面而言,请按照@CeilingGecko所述操作,并仅使用1个webdriver实例。你可以这样做:

Class A extends T {
    LoginPage loginPage = new LoginPage(driver);

    @Test
    public void testMethod1() {
        loginPage.login("username", "password");
    }
}

Class LoginPage {
    WebDriver driver;
    public LoginPage(WebDriver driver) {
        this.driver = driver;
    }

    public void login(String user, String password) {
        // driver.doStuff()
    }
}

抬头看。我有一篇相关文章,其中有一个例子。

关于
webDriver.quit()
?只使用一个web驱动程序(在特定的JUnit测试用例中创建它),而不是为每个页面创建一个web驱动程序,只需在每个页面类中创建可以将驱动程序传递给的方法即可。非常感谢。我不是在我的每个类中创建webdriver,而是只在第一个登录页面上创建,然后将其传递给其他类。我将改变结构,以便我的第一个主页将该webdriver作为参数,然后在每次测试之前创建一个,并能够在after方法中退出它。我有chain class3 extends 2,2 extends 1和1 extends T,它在after之后。我正在运行我的测试,它从3->2->1->T开始运行。它在nullpointexception中失败,我很快就会找到位置:)问题是为什么After没有执行?如果没有实际看到代码,我将无法告诉您:(如果你有一个用于你的东西的框架,它可能会有所帮助。。试试。。这是一个专门用于开始使用selenium的框架。。它可能会为你提供关于如何创建测试的伟大实践。在自述中,它会为你提供下载链接。