我有一个与改进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的所有方法,但我认为我应该以一种聪明的方式重用我的方法和类。
有人知道如何在我的代码中实现第二个浏览器吗?
谢谢
安德烈
答案 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