フォーラムに質問を投稿して、テスト スイート (2 つのテストケースを含む) を中断することなく一貫して実行する方法を尋ねました。 前の投稿へのリンク
有益な返信が示唆した
クラスごとに 1 回ドライバーをインスタンス化し、同じセッションの使用に依存する同じクラスにテストケースを配置します。
ユーザーは、テストケースを互いに独立させることも提案しました。
2 つのテスト ケースがあります (同じログイン セッションを維持するために、2 つのテスト ケースを 1 つのクラスに結合しました)
case1: サイトにログインして認証セッションを行い、メンバーを検索してメンバー プロファイルにアクセスする
ケース 2: メンバー プロファイルで、寄付者のプロファイル ページにアクセスし、プレッジを追加してから、特定のキャンペーン ページにアクセスしてプレッジ金額を検索します。
私の質問は、テストケースを互いに独立させる方法です。たとえば、ログインセッションが失敗した場合でも、スイートはテストケース2を実行できます。私の考えでは、各テスト クラス (各テスト ケースを表す) で個別のドライバー インスタンスを作成する必要があるため、case1 が失敗した場合でも、case2 を実行し続けることができます。この作業を行うための適切な方法を教えてください。
これがテストスイートの私のコードです
テストクラスを実行するドライバー
import org.junit.runner.RunWith; org.junit.runners.Suite をインポートします。
@RunWith(Suite.class)
@Suite.SuiteClasses
(
{
SearchDonorSuzy.class
}
)
public class searchDonorAddPledge
{
}
テスト ケース コードには、認証、メンバーの検索、ドナー プロファイルへのアクセス、誓約の追加、誓約金額の検索が含まれます。
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class SearchDonorSuzy
{
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "https://jlaustin.tcheetah.com/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
/*
*test case 1: login + search member
*/
@Test
public void testSearchDonorSuzy() throws Exception {
driver.get(baseUrl + "/?html=openid");
driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
driver.findElement(By.id("edit-name")).clear();
driver.findElement(By.id("edit-name")).sendKeys("username");
driver.findElement(By.id("edit-pass")).clear();
driver.findElement(By.id("edit-pass")).sendKeys("password");
driver.findElement(By.id("edit-submit")).click();
driver.findElement(By.id("cmp_admin")).click();
driver.findElement(By.id("quicksearch_anchor")).click();
driver.findElement(By.cssSelector("img[alt=\"Member\"]")).click();
driver.findElement(By.id("search_name")).clear();
driver.findElement(By.id("search_name")).sendKeys("suzy");
driver.manage().timeouts().implicitlyWait(6, TimeUnit.SECONDS);
driver.findElement(By.cssSelector("input.btn")).click();
driver.findElement(By.linkText("Balagia, Suzy")).click();
/*
* test case 2: access donor's profile and add a pledge
*/
driver.findElement(By.xpath("(//a[contains(text(),'Donor')])[2]")).click();
driver.findElement(By.linkText("Campaign Manager")).click();
new Select(driver.findElement(By.id("campaign_id"))).selectByVisibleText("A Christmas Affair 2012");
driver.findElement(By.xpath("//a[contains(text(),'Add\n pledge')]")).click();
driver.findElement(By.id("pledge_amount")).clear();
driver.findElement(By.id("pledge_amount")).sendKeys("100.00");
driver.findElement(By.id("pledge_notes")).clear();
driver.findElement(By.id("pledge_notes")).sendKeys("test pledge");
driver.findElement(By.cssSelector("input[type=\"image\"]")).click();
/*
* search donation amount in donation campaign page
*/
driver.findElement(By.linkText("Donor")).click();
driver.findElement(By.linkText("A Christmas Affair 2013")).click();
new Select(driver.findElement(By.name("campaign_id"))).selectByVisibleText("A Christmas Affair 2012");
driver.findElement(By.linkText("Donors")).click();
driver.findElement(By.id("search_name")).clear();
driver.findElement(By.id("search_name")).sendKeys("suzy");
driver.findElement(By.cssSelector("input[type=\"image\"]")).click();
}
@After
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 String closeAlertAndGetItsText()
{
try
{
Alert alert = driver.switchTo().alert();
if (acceptNextAlert)
{
alert.accept();
}
else
{
alert.dismiss();
}
return alert.getText();
}
finally
{
acceptNextAlert = true;
}
}
}