iframe パフォーマンスの向上

Internet Explorer 以外のブラウザー上で、多くの iframe を使用した Web アプリケーションに対するテストを再生すると、速度が遅くなる場合があります。このトピックでは、次のブラウザー使用時における、パフォーマンスを最適化する方法について、いくつかの方法を提案します。
  • Google Chrome
  • Mozilla Firefox
  • Microsoft Edge
  • Apple Safari
  • サポートするモバイル ブラウザー(モバイル デバイスまたはエミュレータ上)

このようなパフォーマンスの問題に直面した場合、以下に示すパフォーマンス最適化手法をテスト スクリプトに対して試すことができます。

たとえば、以下のような iframe 構造を持つ Web アプリケーションをテストしていることを想定します。
BrowserWindow
  iframe name=1
    iframe name=2
    iframe name=3
    iframe name=4
    iframe name=5
  iframe name=6
    iframe name=7
    iframe name=8
    iframe name=9
この場合、以下のようなパフォーマンス最適化手法を試すことができます。
iframe サポートのホワイトリスト を使って、テスト対象にする iframe のみを有効化する
たとえば、上記の iframe 構造において、name が 8 の iframe 内の要素だけを操作対象とする場合を考えます。このような要素に対するロケーターは次のようになります。
//BrowserApplication//BrowserWindow//IFRAME[@name='6']//IFRAME[@name='8']//input[@name='username']
注: Internet Explorer 以外のすべてのサポートするブラウザーに対するロケーターには、iframe が含まれます。

name が 8 の iframe の要素を操作対象とするには、すべての親 iframe も iframe サポートのホワイトリスト に指定する必要があります。この例の場合は、「name:6, name:8」を iframe サポートのホワイトリスト フィールドに指定します。

iframe サポートのブラックリスト を使って、テスト対象にしない iframe を無効化する

iframe サポートのブラックリスト を使って、広告を表示する iframe などを無効化して、テスト対象からはずすことができます。

たとえば、上記の iframe 構造において、name が 1 の iframe とその子 iframe の要素をテストする必要が無ければ、「name:1」を iframe サポートのブラックリスト フィールドに指定します。

iframe サポートを完全に無効化する

OPT_XBROWSER_ENABLE_IFRAME_SUPPORT オプションをオフにして、iframe サポートを完全に無効化することができます。

たとえば、アプリケーションのすべての iframe が広告を表示するために使用されている場合、これらの iframe をテストする必要が無ければ、このオプションを使用できます。

iframe の検索数を低減するロケーターの構成

iframe の検索数を減らすようにロケーターを構成すると、検索操作の再生パフォーマンスを向上させることができます。このパフォーマンス最適化手法は、iframe サポートのブラックリストiframe サポートのホワイトリスト と組み合わせて使用すると、より効果的です。

たとえば、上記の iframe 構造において、name が 8 の iframe 内の要素だけを操作対象とする場合を考えます。XPath ロケーターやオブジェクト マップ エントリを、iframe の検索数を減らすように構成することができます。

次のサンプル スクリプトでは、name が 8 の iframe を複数回検索します。
desktop.<DomElement>find("//BrowserApplication//BrowserWindow//IFRAME[@name='6']//IFRAME[@name='8']//input[@name='username']").typeKeys("my user name"); 
desktop.<DomElement>find("//BrowserApplication//BrowserWindow//IFRAME[@name='6']//IFRAME[@name='8']//input[@name='password']").typeKeys("top secret"); 
desktop.<DomElement>find("//BrowserApplication//BrowserWindow//IFRAME[@name='6']//IFRAME[@name='8']//input[@name='loginButton']").click();
次のようにロケーターを構成することにより、name が 8 の iframe を一度だけ検索するように変更できます。
DomElement iframe = desktop.<DomElement>find("//BrowserApplication//BrowserWindow//IFRAME[@name='6']//IFRAME[@name='8']"); 
iframe.<DomElement>find("//input[@name='username']").typeKeys("my user name"); 
iframe.<DomElement>find("//input[@name='password']").typeKeys("top secret"); 
iframe.<DomElement>find("//input[@name='loginButton']").click();