Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于所有浏览器驱动程序和冗余代码的Selenium Java基类_Java_Google Chrome_Selenium_Selenium Webdriver_Automated Tests - Fatal编程技术网

用于所有浏览器驱动程序和冗余代码的Selenium Java基类

用于所有浏览器驱动程序和冗余代码的Selenium Java基类,java,google-chrome,selenium,selenium-webdriver,automated-tests,Java,Google Chrome,Selenium,Selenium Webdriver,Automated Tests,我是Selenium和Java新手,需要基类方面的帮助。我有我的基地,我为驱动程序浏览器和它的关闭设置方法。问题是,当我从main调用这些方法时,总是会调用web驱动程序,并且浏览器会多次打开。如果我不希望代码重复,那么最佳实践是什么 我想要一个好的项目结构 主要内容: 测试库: public class TestBase { String a = System.setProperty("webdriver.chrome.driver", "path

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

主要内容:

测试库:

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

对于函数或类中的每个测试。因此我想创建基类并从中继承。

示例
Selenium
使用
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
    }
}
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);
    }
}
登录测试

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 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 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);
    }
}
登录页面

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

我没有试着编译这个,但这是基本的想法。我将让您填写详细信息。

因为这些都是测试,所以您不应该像使用
Main
方法的程序一样运行它,而应该研究一个单元测试框架,如
junit
或任何其他您认为合适的框架。这些框架内置了设置和拆卸的概念,使其更易于实现。