JUnit/TestNGによるSeleniumのガイド

1前書き

この記事は、http://www.seleniumhq.org/[Selenium]を操作し、http://junit.org/[JUnit]およびhttp://testng.org/[TestNGを使用してテストを書くための簡単で実用的な入門書です。]。

2セレンの統合

このセクションでは、まずブラウザウィンドウを開き、特定のURLに移動してページ上の目的のコンテンツを探すという単純なシナリオから始めます。

2.1. Mavenの依存関係

pom.xml ファイルに、次の依存関係を追加します。

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.4.0</version>
</dependency>

最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Cselenium-java[Maven Central Repository]にあります。

** 2.2. セレン構成

**

まず、 SeleniumConfig という名前の新しいJavaクラスファイルを作成します。

public class SeleniumConfig {

    private WebDriver driver;

   //...

}

Selenium 3.xバージョンを使用している場合、 webdriver.gecko.driver というシステムプロパティを使用して、実行可能な GeckoDriver ファイルのパスを(OSに基づいて)指定する必要があります。GeckoDriverの最新バージョンはhttpsからダウンロードできます。 ://github.com/mozilla/geckodriver/releases[Github Geckodriverリリース]。

コンストラクタで WebDriver を初期化しましょう。ページ上の要素が表示されるのを待つための WebDriver のタイムアウトとして5秒を設定します。

public SeleniumConfig() {
    Capabilities capabilities = DesiredCapabilities.firefox();
    driver = new FirefoxDriver(capabilities);
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}

static {
    System.setProperty("webdriver.gecko.driver", findFile("geckodriver.mac"));
}

static private String findFile(String filename) {
   String paths[]= {"", "bin/", "target/classes"};
   for (String path : paths) {
      if (new File(path + filename).exists())
          return path + filename;
   }
   return "";
}

この構成クラスには、これから無視することになるいくつかのメソッドが含まれていますが、このシリーズの後半では、これらについて詳しく説明します。

次に、 SeleniumExample クラスを実装する必要があります。

public class SeleniumExample {

    private SeleniumConfig config;
    private String url = "http://www.baeldung.com/";

    public SeleniumExample() {
        config = new SeleniumConfig();
        config.getDriver().get(url);
    }

   //...
}

ここでは、 SeleniumConfig を初期化し、ナビゲートするURLを設定します。同様に、ブラウザを閉じてページのタイトルを取得するための簡単なAPIを実装します。

public void closeWindow() {
    this.config.getDriver().close();
}

public String getTitle() {
    return this.config.getDriver().getTitle();
}

baeldung.comのAboutセクションに移動するには、ホームページロード時にオーバーレイをチェックして閉じる closeOverlay() メソッドを作成する必要があります。その後、 getAboutBaeldungPage() メソッドを使用してAbout Baeldungページに移動します。

public void getAboutBaeldungPage() {
    closeOverlay();
    clickAboutLink();
    clickAboutUsLink();
}

private void closeOverlay() {
    List<WebElement> webElementList = this.config.getDriver()
      .findElements(By.tagName("a"));
    if (webElementList != null) {
       webElementList.stream()
         .filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title")))
         .filter(WebElement::isDisplayed)
         .findAny()
         .ifPresent(WebElement::click);
    }
}

private void clickAboutLink() {
    this.config.getDriver().findElement(By.partialLinkText("About")).click();
}

private void clickAboutUsLink() {
    Actions builder = new Actions(config.getDriver());
    WebElement element = this.config.getDriver()
      .findElement(By.partialLinkText("About Baeldung."));
    builder.moveToElement(element)
      .build()
      .perform();
}

表示されたページで必要な情報が利用可能かどうかを確認できます。

public boolean isAuthorInformationAvailable() {
    return this.config.getDriver()
      .findElement(By.cssSelector("article > .row > div"))
      .isDisplayed();
}

次に、このクラスをJUnitとTestNGの両方でテストします。

3 JUnitで

__SeleniumWithJUnitLiveTestとして新しいテストクラスを作成しましょう。

public class SeleniumWithJUnitLiveTest {

    private static SeleniumExample seleniumExample;
    private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials";

   //more code goes here...

}

org.junit.BeforeClass @ BeforeClass アノテーションを使用して初期設定を行います。この setUp() メソッドでは、 SeleniumExample オブジェクトを初期化します。

@BeforeClass
public static void setUp() {
    seleniumExample = new SeleniumExample();
}

同様に、テストケースが終了したら、新しく開いたブラウザを閉じます。テストケースの実行が終了したときに設定をクリーンアップするために、 @ AfterClass アノテーションを使用してこれを行います。

@AfterClass
public static void tearDown() {
    seleniumExample.closeWindow();
}

SeleniumExample メンバー変数の static 修飾子に注意してください - この変数は setUp() および tearDown() 静的メソッドで使用する必要があるため、 @ BeforeClass および @ AfterClass は静的メソッドでのみ呼び出すことができます。

最後に、フルテストを作成します。

@Test
public void whenAboutBaeldungIsLoaded__thenAboutEugenIsMentionedOnPage() {
    seleniumExample.getAboutBaeldungPage();
    String actualTitle = seleniumExample.getTitle();

    assertNotNull(actualTitle);
    assertEquals(expectedTitle, actualTitle);
    assertTrue(seleniumExample.isAuthorInformationAvailable());
}

このテストメソッドは、Webページのタイトルが null ではなく、期待どおりに設定されていることを表明します。それに加えて、私たちはページが期待された情報を含んでいることを確認します。

テストが実行されると、FirefoxでURLを開き、その後Webページのタイトルとコンテンツが確認された後でそれを閉じます。

4 TestNG とは

TestNGを使ってテストケース/スイートを実行しましょう。

Eclipseを使用している場合、TestNGプラグインはhttps://marketplace.eclipse.org/[Eclipse Marketplace]からダウンロードしてインストールすることができます。

まず、新しいテストクラスを作成しましょう。

public class SeleniumWithTestNGLiveTest {

    private SeleniumExample seleniumExample;
    private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials";

   //more code goes here...

}

SeleniumExampleクラスをインスタンス化するには、 org.testng.annotations.BeforeSuite @ BeforeSuite アノテーションを使用します。テストスイートが起動される直前に setUp()__メソッドが起動されます。

@BeforeSuite
public void setUp() {
    seleniumExample = new SeleniumExample();
}

テストスイートが完了したら、 org.testng.annotations.AfterSuite @ AfterSuite アノテーションを使用して、開いているブラウザを閉じます。

@AfterSuite
public void tearDown() {
    seleniumExample.closeWindow();
}

最後に、テストを実装しましょう。

@Test
public void whenAboutBaeldungIsLoaded__thenAboutEugenIsMentionedOnPage() {
    seleniumExample.getAboutBaeldungPage();
    String actualTitle = seleniumExample.getTitle();

    assertNotNull(actualTitle);
    assertEquals(expectedTitle, actualTitle);
    assertTrue(seleniumExample.isAuthorInformationAvailable());
}

テストスイートが正常に完了すると、プロジェクトの test-output フォルダーにHTMLおよびXMLのレポートが表示されます。これらのレポートはテスト結果をまとめたものです。

5結論

このクイック記事では、JUnitとTestNGの両方を使ってSelenium 3テストを書くための簡単な紹介に焦点を当てました。

いつものように、記事のソースは利用可能です https://github.com/eugenp/tutorials/tree/master/testing-modules/selenium-junit-testng [over GitHubで。

前の投稿:Java数学クラスの手引き
次の投稿:JavaServer Faces(JSF)とSpring