2

私はTestNG自分のテストを作成するために使用してきましたがWebDriver、これまでのところ、この組み合わせは問題なく機能しています。しかし、私はこれまでのところ、克服する方法をまだ見つけていない問題にぶつかっています。

WebDriverは、100を超えるクラスに950を超えるテストが分散しているグループの最初のテストで作成されます。複数のブラウザーインスタンスの作成を回避するために(ほとんどのテストは非常に短く、ブラウザーの起動にはテスト自体よりも時間がかかる場合があるため)、最初@BeforeSuiteに(およびオブジェクトを破棄する@AfterSuite)レベルでドライバーインスタンスを宣言してみました後でテストして再利用します。

ただし、別のクラスで開始するとNullPointerException、ドライバーを見つけようとするときにぶつかります。

コードは、次のリンク(https://gist.github.com/4530030)のgistに掲載されています。を非難する行NullPointerExceptionはSecondTest.java:15です

4

3 に答える 3

3

おそらくこれは少し遅れていますが、ドライバ オブジェクトが firsttest と secondtest で共有されていません。それぞれに独自のコピーがあります。したがって、初期化されるものはすべて自分のコピーです。どちらのクラスが最初に実行されても機能し、2 番目のクラスはそのコピーが初期化されていないため、それを持ちません。あなたができることは、要求されたときに同じドライバーオブジェクトを返すクラスを持つことです..

public class DriverInitializer {

private static WebDriver driver;

@BeforeSuite
public void setTestSuite() throws MalformedURLException {
    driver = new FirefoxDriver();
}

@AfterSuite
public void endTestSuite() {
    driver.quit();
}

public static WebDriver getDriver(){
    return driver;
}

}

次に、すべてのケースを呼び出します。最初のテスト呼び出し

DriverInitializer.getDriver().get("http://www.google.com");

セカンドテストコール

DriverInitializer.getDriver().get("http://cnn.com");

したがって、誰が同じドライバー インスタンスを呼び出しても、返されます。

beforesuite と aftersuite は一度だけ定義する必要があり、どこにでも配置できます。上記の例では、プライベート変数を参照しているため、そこに保持する必要がありました..

于 2013-02-26T18:03:30.000 に答える
1

わかりました、私はあなたのコードを見ました。

driver変数はWebDriverInitクラスで定義されます。しかし、FirstTestクラスではほとんど到達できません。SuperTestおそらく、これをクラスに追加する必要があります。

protected WebDriver getDriver(){
   return wdi.getDriver();
}

and の先頭で、クラスの変数を定義する必要がFirstTestあります。SecondTestdriver

private WebDriver driver;

そして前に

@BeforeSuite

public void setTestSuite() throws MalformedURLException {

startWebDriver();
driver = super.getDriver();

}

私は本当のJava初心者なので、間違っている可能性があります。しかし、ここでの原因は、1 回目と 2 回目のテストでドライバーを送信していないことだと思います...

編集 SecondTest クラスには、FirstTest クラスと@BeforeSuite同じようにありません。SecondTest クラスのどこでも webdriver を起動しない

于 2013-01-14T14:30:20.590 に答える
0

最初のテストでは、@BeforeSuiteと@AfterSuiteを定義しました。これらは、最初のテストのためにドライバーオブジェクトを作成および破棄します。

2番目のテストには@BeforeSuiteまたは@AfterSuiteメソッドがないため、ドライバーオブジェクトをインスタンス化するものがないため、NPEが取得されます。

@ BeforeSuite /@AfterSuiteを2番目のテストに追加します。

于 2013-02-22T16:33:46.193 に答える