首页 文章

所有浏览器驱动程序和代码的Selenium JAVA基类都是多余的

提问于
浏览
1

你好,我是Selenium和java的新手,我需要基类的帮助 . 我有基础,我为驱动程序浏览器设置方法及其关闭 . 问题是,当我从main调用这些方法时,总是调用web驱动程序并且浏览器多次打开 . 如果我不希望代码重复并且我想要一个良好的项目结构,那么最佳实践是什么 . 非常感谢 .

主要:

public class Main extends TestBase {
    public static void main(String[] args) throws InterruptedException, ClassNotFoundException, SQLException {
        LoginTest LoginTest = new LoginTest();
        LogofTest LogofTest = new LogofTest();
        TestBase TestBase = new TestBase();
        LoginTest.setUpBeforeTestMethod();
        LoginTest.loginAsAdmin();
        LogofTest.logofAsAdmin();
        LoginTest.tearDownAfterTestClass();
    }
}

TestBase:

public class TestBase {
String a = System.setProperty("webdriver.chrome.driver",
        "path");
WebDriver driver = new ChromeDriver();

protected WebDriver setUpBeforeTestClass() {

    return driver;
}

protected void setUpBeforeTestMethod() {
    driver.get("website");
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

protected void tearDownAfterTestClass() {
    driver.close();
}}

LoginTest:

public class LoginTest extends TestBase {

    public void login() throws InterruptedException {
        WebElement username = driver.findElement(By.name("username"));
        username.sendKeys("username");
}
}

主要的焦点是我不想再为函数或类中的每个测试再写 WebDriver driver = new ChromeDriver(); driver.get("website"); System.setProperty("webdriver.chrome,"path"); . 所以我想创建基类并从中继承 .

1 回答

  • 1

    示例 Selenium 使用 Page Object Model 使用 JUnit 进行测试

    TestBase

    public class TestBase
    {
        private String a = System.setProperty("webdriver.chrome.driver", "path");
        protected WebDriver driver;
    
        @Before //Before each test case, use BeforeClass for before each test class
        public static void setUpBeforeTestCase() {
            driver = new ChromeDriver();
            driver.get("website");
        }
    
        @After
        public static void tearDownAfterTestCase() {
            driver.Quit(); //driver.Close() closes the window, but doesn't properly dispose of the driver
        }
    }
    

    LoginTest

    public class LoginTest extends TestBase {
    
        @Test
        public void loginAndOutAsAdmin(){
            LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class);
            LandingPage landingPage =  loginPage.login("adminUser", "adminPassword");
            landingPage.logout();
            //Do some sort of assert here that you are logged out
        }
    }
    

    BasePage

    public class BasePage
    {
        protected WebDriver driver;
    
        //Other common stuff your Page Objects will do, like wait for an element
    }
    

    LoginPage

    public class LoginPage extends BasePage
    {
        @FindBy(how = How.NAME, using = "username")
        private WebElement usernameBox;
    
        //something for passwordBox and loginButton
    
        public LoginPage(WebDriver currentDriver)
        {
            driver = currentDriver;
        }
    
        public LandingPage login(String username, String password)
        {
            usernameBox.sendKeys(username);
            passwordBox.sendKeys(password);
            loginButton.click();
    
            return PageFactory.initElements(driver, LandingPage.class);
        }
    }
    

    我没有尝试编译这个,但这是基本的想法 . 我会让你填写细节 .

相关问题