Skip to main content
Skip table of contents

selenium (JA)


T-PlanによるSelenium WebDriverオートメーション

内容

1. はじめに
2. セットアップ手順
3. セレニウムの設定
4. オートメーション
4.1オートメーションの例
4.2Selenium APIへのアクセス
4.3既存のSeleniumスクリプトの統合
4.4パラレル・ブラウザ・オートメーション(負荷テスト)


1.はじめに

バージョン5.0ではSelenium WebDriverとの統合を実現し、単一スクリプトから画像ベースとウェブブラウザの自動化を組み合わせた操作を可能にします。

主な機能:

  • Robot 8 は Selenium 4.25 を使用しますが、Robot 7.x は Selenium Java Client 3.141.59 と統合されています。お使いのバージョンはブラウザコマンド設定で確認できます(下記参照)。ファイルはselenium/フォルダにインストールされ、必要に応じて手動で新しいバージョンに置き換えることができます。

    • Microsoft Edge

    • マイクロソフト インターネット エクスプローラー

    • Firefox

    • Chrome

    • Safari (Mac OS) OS)

    • Chroniumベースのブラウザは、プラグインとして(バージョン 7.0 以降)、またはOS別リリースの一部として(バージョン 8.0 以降)提供されます。

  • GUIモードでは、一度に自動化できるローカルブラウザは1つだけです。v7.2.6以降、CLIモードでは複数のけです。複数のパラレルブラウザを起動できます。

  • バージョン8以降では、同一ブラウザインスタンス内の複数のタブやウィンドウを自動化できます。ただし、一度に自動化できるのは1つのタブまたはウィンドウのみであるため、並列テストではありません。詳細は(ja) ブラウザコマンドを参照してください。

  • リモートブラウザの自動化(Seleniumグリッド)はv6.3以降でサポートされています。

2.セットアップ手順

ローカルブラウザを開くには:

  1. Seleniumダウンロードページを開き、「サードパーティ製ドライバー、バインディング、およびプラグイン」 セクションまでスクロールします。対象のブラウザドライバーをダウンロードし、ハードドライブに解凍してください。

  2. T-Plan RobotメニューからSelenium → Seleniumの設定を選択し、ドライバ実行ファイルへのパスを設定してください。

    重要:ドライバ実行ファイルのバージョンはブラウザのバージョンと一致している必要があります。一致しない場合、接続が失敗する可能性があります。例:Chrome バージョン 101 を自動化するには、chromedriver.exe バージョン 101 が必要です。自動化を安定させるには、ブラウザの自動更新を無効にするか、ブラウザ更新のたびにドライバーを更新してください。

  3. Selenium → ブラウザを開く... を選択するか、ツールバーの ブラウザ ボタンをクリックします。ドロップダウンから対象のブラウザを選択し、必要に応じて対象のURLを入力します。開く をクリックして開始します。



    注:Robot v7 では ブラウザ設定 を設定する機能が導入されました。この機能は、Selenium を通じてこの機能をサポートするブラウザ、すなわち Firefox と Chrome でのみ利用可能です。

リモートブラウザに接続するには:

  1. まずSeleniumグリッドを設定します。

  2. Selenium → ブラウザを開く... を選択するか、ブラウザ ツールバーボタンをクリックします。

  3. ウィンドウ内のリモートタブを選択し、ハブのURLを入力して対象のブラウザタイプを選択します。開くをクリックして開始します。

ブラウザが起動したら、それを操作するためのスクリプトコードの作成を開始できます。現在のページ内の要素を表示するには、Selenium → 要素を表示 メニュー項目を開きます。

3.Seleniumの設定

ブラウザコマンド設定画面では、いくつかのSelenium設定オプションをサポートしています:

  • 特定のドライバに渡すコマンドライン引数(CLI引数)を指定できます。Chromeの場合、これはコミュニティで経験した問題.を回避する方法です。引数はブラウザを開くの「args」パラメータを使用してスクリプトからも渡せます。

    現在の状況:

    • Firefoxのオプションについてはこちらに説明があります。

    • Chromeのオプションは公式に文書化されていませんが、Chromiumエンジンのソースコードから取得できます。

    • Chromiumのオプションは基本的にChromeと同じですが、エンジン単独で実装されているものに限定されます。

    • MS Internet Explorer のオプションはサポートされていません。

    • MS Edge のオプションはリリース8で完全サポートされます。v7.2.6以降では、ブラウザウィンドウを最大化するために--start-maximizedオプションのみを使用できます。

    • Safariのオプションは完全にはサポートされていません。バージョン7.2.6以降では、ブラウザウィンドウを最大化するために--start-maximizedという唯一のオプションを使用できます。

  • システムポップアップ(アラート)の処理方法を指定するオプションがあります。

    • デフォルトの動作はDISMISSであり、これによりドライバーは最初のオプション(ボタン)を選択し、ウィンドウを直ちに閉じます。

    • アラートを画面上に表示し続けるには、値をIGNOREに設定してください。

4. 自動化

Robotスクリプト言語には2つの新要素が追加されました:

  • "ブラウザ"比較メソッドは、標準のCompareToそしてWaitforコマンドを使用して、ウェブページ内の要素を検索することを可能にします。

  • "Browser"コマンドは、Seleniumで制御されるブラウザの管理と操作を可能にします。コマンドの正式な仕様については、言語リファレンスを参照してください。

    • "Browser open"を使用して対象のブラウザとWebサイトを開きます。"Browser close"を呼び出して閉じます。



    • 「ブラウザ検索」を使用してページ内の要素(HTMLタグ)を特定し、任意の操作(クリック、入力、送信、クリア、選択)を適用します。対象要素は以下のように指定できます:

      • FAST:XPath、CSS、または1つ以上の要素属性を入力し、検証をクリックしてください。条件に一致する要素が複数存在する場合は、ポップアップウィンドウ内の「ビューアで選択」ボタンを選択してください。ビューア内で対象要素を選択し、該当する条件にチェックを入れて特定してください。

      • SLOW:コマンドプロパティウィンドウで「ビューアで選択」を選択すると要素ビューアが開きます。現在のウェブページ内の全要素を読み込むため、処理が遅くなる可能性があります。ビューア内で対象要素を選択し、該当する条件にチェックを入れて特定してください。



        注:"テキスト" および "部分テキスト" の条件だけでは通常不十分です。Selenium は対象テキストを含む要素だけでなく、その親要素(div、form など)もすべて返すためです。これにより、最上位要素のテキストやページ全体のテキストを取得できます。例えば、ページ内の全テキストを取得するには、"タグ名""body"に設定します。呼び出し元スクリプトは、_WEB_TEXT変数からテキストを取得できます。

    • 基準を設計したら、アクションを実行ボタンを選択して、選択したアクションをターゲット要素に適用できます。これにより、ブラウザとの直接的なやり取りを回避し、期待通りに動作することを確認できます。

    • OK を選択して、コマンドをアクティブなスクリプトエディタに保存します。次の行で別の"Browser find" コマンドを設計したい場合は、代わりに"OK & Create New"ボタンをクリックしてください。

"ブラウザ検索" コマンドは、一連の変数を通じて、検出された要素の数とそれらの属性の一部を公開します:

変数名

説明

_WEB_COUNT=<number>

「ブラウザ検索」によって取得された要素の数

_WEB_X_<n>=<x-coordinate>
_WEB_Y_<n>=<x-coordinate>
_WEB_W_<n>=<x-coordinate>
_WEB_H_<n>=<x-coordinate>

n番目の要素のX座標、Y座標、幅、高さ。

_WEB_TEXT=<text>

n番目の要素のテキスト(累積/すべての子要素のテキストを含む)。

コマンドは、さらに最初の30個までの要素のHTML属性を、_WEB_というプレフィックスが付いた変数に格納します。例えば、リンク("a"タグ)を検索する場合、2番目の要素の"href"属性は_WEB_HREF_2変数として利用可能になります。30要素という制限はパフォーマンス上の理由で適用されており、変更できません。

4.1 自動化の例

簡単な例でロボットの能力を実演しましょう:

  1. FirefoxでWikipediaのホームページを開く

  2. 検索フィールドに「自動化」と入力し、送信して自動化のトピックを開きます。

Javaにおける純粋なSeleniumソリューションは次のようになります:

CODE
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.By;

public class WikipediaAutomation {
    
    public static void main(String args[]) {
        // Set path to the Firefox/Gecko driver
        System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");
        
        // Create the driver and execute the script
        WebDriver driver = new FirefoxDriver();
        // Open the Wikipedia home page
        driver.get("https://www.wikipedia.org");

        WikipediaAutomation script = new WikipediaAutomation();
        script.automate(driver);
    }
    
    public void automate(WebDriver driver) {       
        // Enter 'automation' into the search field
        driver.findElement(By.id("searchInput")).sendKeys("automation");
        
        // Submit the form using the button next to the field
        driver.findElement(By.xpath("//button")).submit();
    }
}

Robotで同じスクリプトを設計するには、前章で説明したブラウザを開くおよびブラウザを検索するプロパティウィンドウを使用します。

  • もしスクリプトがRobot TPRのものなら、対応するコードは次のようになります:

CODE
Browser "open" browser="firefox" url="https://www.wikipedia.org"
Browser "find" id="searchInput" elaction="type" eltext="automation"
Browser "find" tagname="button" elaction="submit"
  • スクリプトがRobot Javaスクリプトの場合、プロパティウィンドウは以下のような自動化コードを生成します。簡潔さを考慮し、Javaスクリプトクラスの残りの部分は省略されています。

CODE
browserOpen("firefox", "https://www.wikipedia.org");
browserFindAndType("automation", "id", "searchInput");
browserFindAndSubmit("tagname", "button");

4.2 Selenium APIへのアクセス

RobotはまだSeleniumの全機能をサポートしていません。Robot JavaテストスクリプトからJavaコードレベルで未サポートのSelenium機能に遭遇する可能性があります。具体的には以下の通りです:

WebDriverAdapter adapter = WebDriverAdapterFactory.getInstance().getAdapter(getContext(), WebDriverAdapter.ADAPTER_NAME_SELENIUM);

org.openqa.selenium.WebDriver driver = (org.openqa.selenium.WebDriver) adapter.getDriver();

たとえば、TPRテストスクリプトからJavaScriptポップアップを受け入れて処理するには、次のJavaコードブロックを使用します:

CODE
java {
   import com.tplan.robot.remoteclient.webdriver.WebDriverAdapter;
     import com.tplan.robot.remoteclient.webdriver.WebDriverAdapterFactory;

     WebDriverAdapter adapter = WebDriverAdapterFactory.getInstance().getAdapter(getContext(), WebDriverAdapter.ADAPTER_NAME_SELENIUM);
     org.openqa.selenium.WebDriver driver = (org.openqa.selenium.WebDriver) adapter.getDriver();
     driver.switchTo().alert().accept();
} endjava

4.3 既存のSeleniumスクリプトの統合

既存のSelenium Javaコードは、Robotスクリプトと自由に組み合わせることができます。両者が共有する必要があるのは、Selenium WebDriverオブジェクト(org.openqa.selenium.WebDriverインスタンス)のみです。Robot フレームワークの主要なクラスは、実行中のスクリプトに割り当てられたドライバのラッパークラス(WebDriverAdapter)にアクセスすることを可能にする、com.tplan.robot.remoteclient.webdriver.WebDriverAdapterFactory です。

例えば、RobotにFirefoxでWikipediaのホームページを開かせ、上記の純粋なSeleniumの例を用いて自動化を実行させるには、次のようにRobot JavaScriptを作成します:

CODE
package test; 

import com.tplan.robot.scripting.*;
import com.tplan.robot.*;
import com.tplan.robot.remoteclient.webdriver.*;
import java.io.*;

public class RobotWikipediaScript extends DefaultJavaTestScript  {

    public void test() {
        try {
            // Call "Browser open" to create the driver
            browserOpen("firefox", "https://www.wikipedia.org");

            // Obtain a reference to the Selenium driver from the Robot framework
            WebDriverAdapter adapter = WebDriverAdapterFactory.getInstance().getAdapter(getContext(), WebDriverAdapter.ADAPTER_NAME_SELENIUM);
            org.openqa.selenium.WebDriver driver = (org.openqa.selenium.WebDriver) adapter.getDriver();
            
            // Call the existing example Selenium script
            WikipediaAutomation seleniumScript = new WikipediaAutomation();
            seleniumScript.automate(driver);
            
        } catch (StopRequestException ex) {
            throw ex;
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new IllegalStateException(ex);
        }
    }

    public static void main(String args[]) {
        RobotWikipediaScript script = new RobotWikipediaScript();
        ApplicationSupport robot = new ApplicationSupport();
        AutomatedRunnable runnable = robot.createAutomatedRunnable(script, "RobotWikipediaScript@" + Integer.toHexString(script.hashCode()), args, System.out, false);
        new Thread(runnable).start();
    }
}

既存のSeleniumスクリプトをTPRスクリプトから直接呼び出すことはできません。Seleniumの実行をRobot Javaスクリプトでラップし、Runコマンドを使用して呼び出す必要があります。

例えば、TPRスクリプトから自動化を実行するには、上記のRobotWikipediaScriptの例から「browserOpen("firefox", "https://www.wikipedia.org")」メソッド呼び出しを削除し、TPRから以下のように呼び出します:

CODE
Browser "open" browser="firefox" url="https://www.wikipedia.org"
Run "test.RobotWikipediaScript"

上記の例を動作させるには、コンパイル済みSeleniumコード(JARファイルまたはコンパイル済みWikipediaAutomationクラスを含むクラスパス)をRobotクラスのクラスパスに配置してください。

4.4 並列ブラウザ自動化(負荷テスト)

並列ブラウザ自動化のサポートはリリース7.2.6で導入されました。目的は、負荷テストやストレステストの目的で、1つのロボットセッションから複数のブラウザを並列に操作できるようにすることです。

主な機能:

  • ブラウザは、Selenium API のみに依存した オブジェクト指向 および イメージベース の両方の方法で駆動できます。Seleniumベースの(ja) ブラウザコマンドや、Mouse, CompareTo, Waitfor match,Click, MoveTo, PressそしてType/Typelineといった従来のデスクトップコマンドも使用可能です。ローカルデスクトップ接続に依存することなく操作できます。

  • ローカルデスクトップ接続は、スクリプトレコーディング.を有効化するために依然として必要です。生成されたスクリプトは、ブラウザコンテンツのみの要素を自動化している場合に限り、接続なしで正常に実行されるはずです。ローカル・デスクトップ接続は、次のような場合に必要です。

  • 画像ベースのテストは、可視ブラウザコンテンツにのみ適用されます。一貫した結果を得るため、--start-maximized化CLIオプションを使用してブラウザウィンドウを最大化することを検討してください。

  • ブラウザは常に順次起動(1つずつ)され、リソース競合を回避します。起動後、自動化処理は並列で実行される場合があります。

  • 1つのテストスクリプト(.tprまたは.java)は、一度に1つのブラウザのみを制御できます。ロボットGUIは一度に1つのスクリプトしか実行できないため、1つのブラウザしか起動できません。並列テストを実現するには、並列タスクを含むワークアイテムを作成し、CLIモード(-n/nodisplayオプション付き)で実行します。以下の例を参照してください。

  • 並列テストはSafariではサポートされていません。Appleによる制限により、Safariドライバーは一度に1インスタンスのみ実行可能です。

  • ブラウザ接続は当社のライセンス条項の対象となり、ライセンスシートを消費します。

デモWebアプリケーションTプラザでダミー登録を自動化しましょう。対象システムはMS Windows上のMS Edgeブラウザです。登録フォームを開き、個人情報を入力して送信します。データは共有Excelシートの単一行から読み込みます:

行番号はスクリプト内でROWという変数を通じて指定されます。この設計により、-v/-variable CLIスイッチを使用して外部から行(すなわち人物)を設定することが可能になります。また、拡張も容易です。別の人物を登録するには、個人データを記載した新しい行をシートに追加し、その新しい行を扱う別のタスク(スクリプト実行)を作成するだけです。

スクリプトに進む前に、以下のことを確認してください:

  1. Robot 7.2.6 以降で、少なくとも 3 ライセンスのシートをお持ちです。不明な場合は、ツール→ライセンスキーマネージャー ウィンドウの表示内容をご確認ください。

  2. お使いのEdgeブラウザに対応するバージョンのEdge Webドライバーをクリックし、をダウンロードし、そのパスをSeleniumの設定ファイルに指定します。

準備が整ったらサンプルプロジェクトをダウンロードしてください。アーカイブを解凍し、Robotで ファイル→開くプロジェクトメニュー項目を使用して開きます。プロジェクトには主に3つのファイルが含まれています:アーカイブを展開し、Robotでファイル→開くプロジェクトのメニュー項目です。プロジェクトには3つの主要なファイルが含まれている:

  • tpr\data.xls MS Excelファイルには個人データが含まれています。

  • tpr\TPlaza.tpr スクリプトは、ブラウザに単一の登録を実行させます。すぐに実行して、ご自身の環境で正常に動作することを確認できます。

  • schedules\TPlaza.xml ワークアイテムは、TPlaza.tpr スクリプトのインスタンス(タスク)を3つ並列で開始します。以下のスクリーンショットで確認できるように、各タスクはスクリプトのCLIオプションを通じて注入された一意のExcel行番号を処理します:

既に説明した通り、Robot GUIでは一度に1つのスクリプトと1つのブラウザしか操作できません。そこでワークアイテムを起動すると、タスクは並列ではなく順次実行されます。真の並列実行を実現するには、-nオプションを使用してCLIモードに切り替える必要があります。コマンドプロンプトを開き、Robotのインストールフォルダに移動して以下を実行してください:

CODE
C:\Program Files (x86)\T-Plan\Robot> robot.bat -r C:\ParallelBrowserExample\schedules\TPlaza.xml -n

RobotはGUIなしで実行され、3つのブラウザを起動し、自動化処理を並行して実行します。その後、GUIを起動し、プロジェクトツリー内のレポートを確認できます。

ヒント
ワークアイテム・エディターで

アイコンをクリックし、CLI開始コマンドの様々な形式を設計できます。




JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.