Jas*_*ept 6 java testng selenium webdriver
我的目标是让一系列测试一个接一个地运行。我想要一个“登录”脚本让用户登录,然后下面的脚本开始在同一个窗口/驱动程序中继续。我正在使用 TestNG,所以如果有帮助的话,我的测试套件是在 testng.xml 文件中设置的。
public class LoginScript {
String username, password, siteid;
private WebDriver driver;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
static Logger log = Logger.getLogger(LoginScript.class);
@BeforeSuite (alwaysRun=true)
@Parameters({ "url","username","password","site" })
public void setUp(String env, String user, String pwd, String ste) throws Exception {
username=user;
password=pwd;
siteid=ste;
driver = new FirefoxDriver();
driver.get(env);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@Test
public void testLoginScript() throws Exception {
//Maximize window
driver.manage().window().maximize();
//Login
driver.findElement(By.id("TBSiteID")).clear();
driver.findElement(By.id("TBSiteID")).sendKeys(siteid);
driver.findElement(By.id("TBUserName")).clear();
driver.findElement(By.id("TBUserName")).sendKeys(username);
driver.findElement(By.name("TBPassword")).clear();
driver.findElement(By.name("TBPassword")).sendKeys(password);
driver.findElement(By.name("Login")).click();
Thread.sleep(2000);
log.info("Found requested site");
}
@AfterSuite
public void tearDown() throws Exception {
//driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想运行的下一个脚本:
public class AddNormalEE {
String username, password, siteid;
private WebDriver driver;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
static Logger log = Logger.getLogger(AddNormalEE.class);
@BeforeSuite (alwaysRun=true)
@Parameters({ "url","username","password","site" })
public void setUp(String env, String user, String pwd, String ste) throws Exception {
username=user;
password=pwd;
siteid=ste;
//driver = new FirefoxDriver();
//driver.get(env);
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@Test
public void testAddNormalEE() throws Exception {
//Maximize window
//driver.manage().window().maximize();
@AfterSuite
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的测试是依赖的,您可以将它们放在同一个类中,并在 method2 上定义 dependentOnMethod={method1} ,以便保证顺序。如果它位于不同的类之间,您可以考虑从 LoginScript 类扩展 AddNormalEE 类。
要在同一浏览器中运行测试,您的驱动程序实例需要在您的类之间共享,或者它在所有 @Test 中必须相同。要么将其设为静态,要么考虑使用线程本地 Webdriver 变量,以防万一您计划有一天并行运行。在上述情况下,如果需要避免静态,您还可以在登录脚本中使用 getDriver() 方法,该方法将驱动程序对象返回到 AddNormalEE 类。
作为一般实践,最好进行独立测试。您可以利用并行运行来克服独立测试的时间问题。将登录作为一种方法而不是测试,因为我们没有根据上面的代码断言任何行为。如果我正在测试登录,我将进行单独的测试,仅测试登录功能。
| 归档时间: |
|
| 查看次数: |
24348 次 |
| 最近记录: |