【问题标题】:Selenium Java base class for all browser drivers and code which is redundantSelenium Java 基类,用于所有浏览器驱动程序和冗余代码
【发布时间】:2017-07-19 16:17:35
【问题描述】:

我是 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();
    }
}

测试库:

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

登录测试:

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

对于函数或类中的每个测试。所以我想创建基类并继承它。

【问题讨论】:

  • 由于这些是测试,而不是像使用 Main 方法的程序一样运行它,您应该研究像 junit 这样的单元测试框架或任何其他看起来不错的框架。这些框架内置了设置和拆卸的概念,让您更容易实现。

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


【解决方案1】:

示例Selenium 使用页面对象模型

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

登录测试

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

基本页面

public class BasePage
{
    protected WebDriver driver;

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

登录页面

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多