SeleniumとRanorexの違い -オブジェクト認識-

UIテスト自動化ツールには、Ranorexのような有償ツール以外に、Seleniumといった無償ツールがあります。
Seleniumは、広く使われているオープンソースのフレームワークとなります。
お客様がRanorexをご検討される上で、Seleniumとの違いをご質問いただくことも多いです。

上記背景を踏まえ、本記事では、SeleniumとRanorexの違いについてご紹介いたします。
今回は、オブジェクト認識方法にフォーカスし、SeleniumとRanorexのオブジェクト認識方法の違いを説明した上で、Ranorexの強みについてご紹介します。

SeleniumとRanorexのオブジェクト認識方法

Selenium

Seleniumでは、オブジェクトの認識するために ロケーター が用意されています。
Selenium でオブジェクトを検索する際には、指定したロケーターを使用し、要素を検索します。
標準的に用意されているSelenium ロケーターは、以下となります。

ロケーター
idid属性が検索値と一致する要素を検出します。
namename属性が検索値と一致する要素を検出します。
class nameclass名に検索値が含まれている要素を検出します。
tag nameタグ名が検索値と一致する要素を検索します。
link text表示されるテキストが検索値と一致するa(アンカー)要素を検索します。
partial link text表示されるテキストに検索値が含まれているa(アンカー)要素を検索します。
XPathXPath式に一致する要素を検索します。
CSS selectorCSSセレクターに一致する要素を検索します。

Seleniumでは、Webアプリケーションの要素を検索するために findElement()メソッドを提供しています。
このメソッドに、上記のロケーターを使用することで、該当する要素を検出し、該当する要素に対して操作を行います。

Ranorex

Ranorexでは、RanoreXPathといったパス情報を使用し、オブジェクトを認識します。
RanoreXPathは、アプリケーション内部で保持しているシステム情報で構成されています。
Webアプリケーションでは、DOM情報が使用され、デスクトップアプリケーションやモバイルアプリケーション(ネイティブアプリケーション)では、アプリケーション内のコントロールや、プロパティ情報が使用されます。
テスト実行時は、対象のRanoreXPathに一致したオブジェクトに対して操作が行われます。

RanoreXPathに関するより詳しい内容ついては、 RanoreXPathの基本構造 をご参照ください。
http://ranorex.techmatrix.jp/blog/2021/11/05/ranorexpath_basic/

具体例

今回は、開発元(Ranorex社)が公開しているサンプルのWebページ(https://www.ranorex.com/web-testing-examples/)内にある入力フォームを例として、SeleniumとRanorexのオブジェクト認識について比較します。
Nameの入力フォーム(inputタグ)には、id属性が付与されており、id属性の値は”testname”となります。

Selenium

Seleniumの場合、対象の入力フォーム(Name)をクリックし、キーボード入力を行うには、以下のようなテストコードを使用します。
以下のテストコードでは、idロケーターを使用しています。
“testname”の値を持つid要素を検索し、一致した要素に対してクリック操作とキーボード入力が行われます。

//"testname"のid属性を検出し、クリック
driver.findElement(By.id("testname")).click();
//"testname"のid属性を検出し、キーボード入力を行う
driver.findElement(By.id("testname")).sendKeys("taro");

Ranorex

Ranorexの場合、以下のRanoreXPathで、Name横の対象の入力フォームを認識します。
/dom[@domain=’www.ranorex.com’]//form[@id=’testform’]//input[@id=’testname’]

上記のRanoreXPathでは、id属性(testname)も使用されていますが、
Dom要素やForm要素といった複数の要素を組み合わせて、最終的に入力フォームを認識しています。

また、Ranorexではアプリケーション画面に対し、マウスやキーボード操作を行うことで、自動的にテストスクリプトが生成されます。
たとえば、入力フォームをクリックし、値を入力した場合には、以下のように記録されます。

Ranorexの強み

SeleniumとRanorexそれぞれにおける、オブジェクト認識方法について説明しました。
今回は、Seleniumロケーターと比較した場合における、RanoreXPathの強みについてご紹介します。

強み① 動的な属性値を持つオブジェクトへの対応が可能

先ほどの具体例の中で、入力フォームを認識する際に、Seleniumでは、idロケーターを使用して認識しています。
Ranorexにおいても、入力フォームを認識するためのRanoreXPathの中で、id属性が使用されて生成されています。
/dom[@domain=’www.ranorex.com’]//form[@id=’testform’]//input[@id=’testname’]

id属性を使用してオブジェクトの認識を行う場合の課題として、たとえばJavaScript フレームワークや、ローコード開発ツールを使用したアプリケーションでは、id 属性の値がビルドの度に変更されたり、動的な値が付与される場合があります。
この場合、Seleniumの場合、idロケーターでは対応できず、他のロケーターを使用するように再設定する必要があります。

一方で、Ranorexでは、機械学習により、id 属性に対して動的な値が使用されていると判断した場合、id 属性を使用せずにRanoreXPathを生成する機能が搭載されています。
また、id属性に限らず、特定の属性を使用しないように設定したり、RanoreXPath自体を編集することが可能です。

強み② Windowsオブジェクトに対しても認識が可能

Seleniumロケーターでは、以下のようなオブジェクトは認識できません。

・JavaScript の Window オブジェクトを使用したダイアログのオブジェクト
・ファイルのアップロード/ダウンロード操作における、Windowsのオブジェクト

一方、Ranorexでは、Webアプリケーション以外にも、Windowsアプリケーションやモバイルアプリケーションに対応しています。
そのため、上記で挙げたようなWindowsオブジェクトに対しても、RanoreXPathが生成され、オブジェクトとして認識することができます。

強み③ オブジェクト管理のしやすさ

Seleniumでは、テストコードを使用した場合、テスターがコードの中でロケーターを記述することになります。
そのため、テスターには、プログラミングスキルが要求されます。
また、アプリケーションの操作とロケーターの情報が1つのテストスクリプトファイルに記述されるため、テストの管理が複雑化する可能性があります。

以下はJUnit形式のテストコード例となりますが、アプリケーションへの操作とidロケーターは1つのテストスクリプトに記載されています。

public class SampleTest {
  private WebDriver driver;
  private Map<String, Object> vars;
  JavascriptExecutor js;
  @Before
  public void setUp() {
    driver = new ChromeDriver();
    js = (JavascriptExecutor) driver;
    vars = new HashMap<String, Object>();
  }
  @After
  public void tearDown() {
    driver.quit();
  }
  @Test
  public void sample() {
    driver.get("https://www.ranorex.com/web-testing-examples/");
    driver.manage().window().setSize(new Dimension(1148, 1020));
    driver.findElement(By.id("testname")).click();
    driver.findElement(By.id("testname")).sendKeys("taro");
  }
}

一方で、Ranorexでは、レコーディングを行うと、アプリケーション操作とオブジェクト情報(RanoreXPath)は自動的に分けて管理が行われます。
具体的に、アプリケーション操作は アクションテーブル で管理され、オブジェクトは リポジトリ で管理されます。
そのため、アプリケーション操作に変更があった場合、アクションテーブル のみを修正し、オブジェクトに変更があった場合は、リポジトリ に対する修正で対応できます。
これにより、アプリケーションに対して、再度操作してテストを記録し直すことや、アプリケーション操作とオブジェクトの両方を修正するといった作業は必要なく、メンテナンス性や汎用性の高いテストスクリプトを作成することができます。

まとめ

今回は、RanorexとSeleniumにおけるオブジェクト認識の違いについてご紹介しました。
Ranorexでは、RanoreXPathといった独自のパス情報を使用することで、オブジェクト認識が可能となります。
RanoreXPathは、Webアプリケーションだけでなく、Windowsデスクトップアプリケーションやモバイルアプリケーションにも対応していますので、幅広いアプリケーションに対してテストを行うことが可能です。
また、アプリケーション操作とオブジェクト情報は自動的に分割されるため、テストの管理が非常にしやすい構成となり、メンテナンス性の高いテストスクリプトを作成いただけます。

UIテスト自動化を検討している方は、ぜひいちどRanorexを使用してみてください。
Ranorexを使用してみたい方は、こちら からお申込みください。
※Ranorex体験版では、Ranorexのすべての機能を14日間無料でご使用いただけます。