如何创建WebDriver类型的两个对象驱动程序并使用相同的类和方法

时间:2016-05-01 19:58:02

标签: java class selenium methods

我有一个与改进Selenium Java代码有关的问题。我是Java和Selenium的初学者。

我写了一个代码,我从互联网上得到了一个例子,并适应了我的现实。编码工作正常,如下所述:

package test;

import static org.junit.Assert.assertEquals;

import org.junit.Test;


import page.Login;

public class LoginTest extends BaseTest {

    Login login = new Login(driver);

    @Test
    public void loginWithSuccess() {
        sendLoginData("my_user@something.com", "my_password");
        login.clickLogin();
        assertEquals("View Posted Jobs", login.checkLoginSuccess());
    }

    private void sendLoginData(String user, String password) {
        login.sendUser(user);
        login.sendPassword(password);
    }
}

上述程序正在测试并在WebSite中执行loginWithSucess

package config;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WebDriverFactory {

    public static WebDriver createFirefoxDriver() {
        WebDriver driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        return driver;
    }   
}

在上面的例子中,我正在实例化一个名为driver的新对象WebDriver。

package test;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.openqa.selenium.WebDriver;


import config.WebDriverFactory;

public class BaseTest {
    protected static WebDriver driver;
    private static boolean setUpIsDone = false;

    @BeforeClass
    public static void setUp() {
        if (setUpIsDone) {
            return;
        }
//      Creating first browser for student login        
        driver = WebDriverFactory.createFirefoxDriver();
        driver.get("http://test-tuitiondesk.rhcloud.com/auth");
        driver.manage().window().maximize();

        setUpIsDone = true;

    }

以上示例是我打开WebSite进行身份验证的地方

package page;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class Login {

    private WebDriver driver;

    public Login(WebDriver driver) {
        this.driver = driver;

    }


    public void sendUser(String user) {
        driver.findElement(By.xpath("//*[@id='email']")).sendKeys(user);
    }

    public void sendPassword(String password) {
        driver.findElement(By.id("password")).sendKeys(password);
    }

    public void clickLogin() {
        driver.findElement(By.xpath("//*[@id='login-box']/div/div[1]/form/fieldset/div[2]/button")).click();
    }

    public String checkLoginSuccess() {
        return driver.findElement(By.xpath("//a[contains(text(),'View Posted Jobs')]")).getText();
    }

}

上面的示例我有方法将用户ID和密码发送到网页。

到目前为止一切正常。该计划正在执行以下步骤:

1 - 打开firefox

2 - 打开网页

3 - 发送正确的user_id,密码并单击登录按钮

4 - 检查登录是否成功。

我现在的问题是我需要打开一个新的firefox驱动程序并使用不同的user_id登录,这个新的user_id将与第一个user_id交互一些操作,因此我需要打开两个浏览器以同时对两个用户执行操作

我想用最好的方法编写这个实现,而不是简单地用第二个驱动程序再写每个方法。我第一次想到的是创建一个名为driver2的新WebDriver并再次创建引用driver2的所有方法,但我认为我应该以一种聪明的方式重用我的方法和类。

有人知道如何在我的代码中实现第二个浏览器吗?

谢谢

安德烈

1 个答案:

答案 0 :(得分:0)

您只需输入以下代码即可完成此操作:

    driver2 = WebDriverFactory.createFirefoxDriver();
    driver2.get("http://test-tuitiondesk.rhcloud.com/auth");
    //call log in function for driver2
    //code to interact driver2 with driver1