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

时间:2017-02-28 15:45:15

标签: java google-chrome selenium selenium-webdriver automated-tests

你好我是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("网站&#34); System.setProperty(" webdriver.chrome," path"); 用于函数或类中的每个测试。所以我想创建基类并继承它。

1 个答案:

答案 0 :(得分:1)

示例JUnit使用页面对象模型

使用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 } } 进行测试

<强> TestBase

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
    }
}

<强> LoginTest

public class BasePage
{
    protected WebDriver driver;

    //Other common stuff your Page Objects will do, like wait for an element
}

<强>的BasePage

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

<强> LoginPage

for /f tokens^=* %i in ('robocopy /l /e /xa:R %temp% "nothing ..//" /njh /ndl /ns /nc /pf /njs')do @echo %i

我还没有尝试编译这个,但这是基本的想法。我会让你填写详细信息。