3

自動化プロセスで Junit 4 と Selenium Webdriver を使用しています。複数のテスト ケースがあり、各テスト ケースにはログイン機能が必要です。

テスト ケースごとに新しいブラウザーを開いて毎回ログインするのではなく、すべてのテスト ケースを同じブラウザー ウィンドウで実行し、ログイン セッションを維持したいと考えています。(私の現在のスクリプトでは、各テスト ケースで webdriver を開始しています。テスト ケースごとに新しいウィンドウが開き、毎回ログインが行われます)

すべてのテスト ケースを同じブラウザ ウィンドウで実行するテスト スイートを実行したいと考えています。解決策を教えてください。コード :

public class first {
public static WebDriver driver;
@BeforeClass
public static void beforeClass()
{
    System.setProperty("webdriver.chrome.driver", "E:/chromedriver.exe");
    System.out.println("Before class");
    driver = new ChromeDriver();
}
@Test
public void login()throws Exception
{
        driver.get("URL");
    WebElement login = driver.findElement(By.xpath("my xpath");
    login.findElement(By.id("username")).sendKeys("username");
    login.findElement(By.id("password")).sendKeys("pwd");
    driver.findElement(By.xpath("my xpath")).click();
}

}

作成された 2 番目のクラス:

public class second {
public static WebDriver driver;
{
@Test
public void nextstep()throws Exception
{
    WebElement buttons = driver.findElement(By.xpath("my xpath"));
    buttons.findElement(By.className("Classname")).click();

}

}

テスト スイート クラス:

@RunWith(Suite.class)
@SuiteClasses({first.class, second.class})
public class testsuite 
{
public static WebDriver driver;
@BeforeClass
public static void setUpClass()
{
    System.out.println("Master Setup");
}

}
4

2 に答える 2

0

新しいブラウザ ウィンドウを開いてログインするSuite Setupメソッドを実装する必要があります。この方法では、すべてのテストを実行する前にメソッドが 1 回呼び出されます。

メソッドをスイート セットアップ メソッドとして指定するには、それをスイート クラスに配置し、静的にして、アノテーションを付けます(この回答@BeforeClassの例を参照してください)。

あなたが投稿したコードdriverでは、最初のクラスのdriver変数と 2 番目のクラスの変数は同じ変数ではありません。そのため、最初のクラスでdriver初期化すると、2 番目のクラスで が初期化され、NullPointerException.
両方のクラスで同じ変数を使用したい場合は、非静的変数を持つ基本クラスを定義する必要がありますdriver(そもそもなぜそれを静的にしたのですか?)。次に、両方のクラスを基本クラスから派生させます。

于 2013-07-29T05:16:08.437 に答える