robot class selenium webdriver with java
このチュートリアルでは、Javaでのロボットクラスの使用法、例、機能、およびSeleniumフレームワークとの統合について説明します。
ロボットJavaは ロボット のクラス Java AWTパッケージ。これは通常、手動で行うリアルタイムのキーボードとマウスの操作をシミュレートするために使用されます。
JavaのRobotClassの主な目的は、自動化です。その利点は、現在の自動化フレームワークと簡単に統合して、リーチを拡大できることです。
学習内容:
Javaのロボットクラス
このチュートリアルでは、SeleniumとJavaのRobot Classの統合について学習しますが、一般に、Java Robot Classは、Java上に構築された任意の自動化フレームワークで使用できます。
ロボットクラスの機能のシミュレーション
JavaにはRobotClassの多くの機能があり、それらに関連するいくつかの注目すべきメソッドを以下に示します。
#1)キーボードの機能
Robotクラスのキーボード機能は、通常、キーボードで使用可能なさまざまなキーのシミュレーションとその操作を扱います。
public void keyPress(int keycode)
この機能は、入力パラメータキーを押します。操作を完了するには、キーリリース方法を使用する必要があります。
以下のコードスニペットに従ってください。
r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_V);
ここで、上記のコードスニペットでは、CTRL + Vを押しています。 KeyEventメソッドは、キーボードで使用できる他のキーに関連付けられています。それらすべてを試すことができます。
public void keyRelease(int keycode)
このメソッドは、入力パラメーターキーを解放します。これは、キーを押す方法の後処理です。
以下のコードスニペットに従ってください。
r.keyRelease(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_CONTROL);
上記のコードスニペットでは、CTRL + Vをリリースしています。上記と同様に、KeyEventメソッドは、キーボードで使用できる他のキーにも関連付けられています。それらすべてを試すことができます。
#2)マウスの機能
マウスの機能は、マウスのさまざまな操作のシミュレーションを扱います。
public void mouseMove(int x、int y)
ここで、2つのパラメータが画面の座標を決定します。座標を指定すると、マウスは画面の指定された座標のポイントに移動します。
与えられたコードスニペットに従ってください:
robot.mouseMove(0、900);
ここで、xパラメータの位置は0で、yパラメータは900です。したがって、マウスはそのポイントに移動します。画面のさまざまな位置に移動するために、エラーと試行錯誤の方法を実行できます。
public void mousePress(int button)
明確な概念を得るために、keyPress機能でこの機能を想像することができます。このメソッドは、mousePress関数をシミュレートします。
以下のコードスニペットに従ってください。
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); //associated with mouse left click robot.mousePress(InputEvent.BUTTON2_DOWN_MASK); //associated with mouse middle click robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); //associated with mouse right click
public void mouseRelease(intボタン)
明確な概念を得るために、keyPress機能でこの機能を想像することができます。このメソッドは、mousePress関数をシミュレートします。
以下のコードスニペットに従ってください。
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); //associated with mouse left click robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK); //associated with mouse middle click robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); //associated with mouse right click
注意 :探索に利用できる他のいくつかの方法があります。ただし、上記の方法が最も頻繁に使用されます。ただし、他のメソッドを調べるには、OracleドキュメントでRobotJavaクラスを検索できます。
Javaでのロボットクラスの使用
JavaでRobotClassを使用して、自動化フレームワークの機能を効果的に強化できるのはいつ、どこですか?
Seleniumを使用してWebアプリケーションを自動化できることは誰もが知っています。 SeleniumのこれらのWebアプリケーションは、Webアプリの基盤となるWebオブジェクト(ロケーター)を使用して、Webページ上の位置を決定し、それに応じて動作します。場合によっては、Windowsオペレーティングシステムで自動化するときに、Windows認証ポップアップまたはその他のWindowsポップアップを処理する必要があることがわかります。
SeleniumはWindowsアクションを自動化できませんが、JavaのRobotClassを使用してタスクを実行できます。
Javaロボットクラスの例
例1: ロボットクラスを使用していくつかのWindows機能を自動化する
Webアプリケーション全体の小さな部分/モジュールがフラッシュで設計される場合があります。 Robotクラスを使用してその部分を処理できます。フラッシュで設計されたパーツのWebオブジェクトは非表示のままなので。
charをintc ++に変更します
Javaのロボットクラスを使用して自動化できるもう1つの重要な機能は、リッチテキストエディタです。リッチテキストエディタは、Webアプリケーションに埋め込まれたままになることがあります。 RTFエディターには、このクラスを使用して非常に簡単に自動化できる操作機能がいくつかあります。
例2: RTFフィールドを自動化するためのロボットクラスの使用
注意 :のような市場で利用可能な他のオープンソースツールがあります Auto IT (Windows GUIを自動化するために特別に設計された)、Sikuli(画像処理ツール)など、同様のタスクを実行します。
これは真実ですが、JavaのRobotClassにはJDKが付属しています。したがって、インストールするのに他のツールは必要ありません。これは、Javaベースの自動化フレームワークを使用している場合の直接的な利点です。
RTFフィールドの自動化
サンプル画像:
スニペットの例:
import java.awt.AWTException; import java.awt.Robot; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.KeyEvent; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class javainteraction { public void seleniumwithjava() throws AWTException, InterruptedException { System.setProperty('webdriver.chrome.driver', 'D://chromedriver//chromedriver.exe'); WebDriver driver =new ChromeDriver(); driver.get('https://www.tinymce.com' ); driver.manage().window().maximize(); driver.findElement(By.xpath('(//div(contains(@aria-label,'Bold'))//i(contains(@class,'mce-i-bold')))(1)')).click(); Robot r = new Robot(); String text = 'Welcome to the world of automation.'; StringSelection stringSelection = new StringSelection(text); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, stringSelection); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_CONTROL); Thread.sleep(1000); String text1 = 'Hope you enjoy This'; StringSelection stringSelection1 = new StringSelection(text1); Clipboard clipboard1 = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard1.setContents(stringSelection1, stringSelection1); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_CONTROL); driver.findElement(By.xpath('(//div(contains(@aria-label,'Italic'))//i(contains(@class,'mce-i-italic')))(1)')).click(); } public static void main(String args()) throws AWTException, InterruptedException { javainteraction j1 = new javainteraction(); j1.seleniumwithjava(); } }
ここでは、RTFエディターの2つの機能が、太字と斜体のアイコンを使用して自動化されています。
一部のWindows機能の自動化
import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; public class RobotJ { public static void main(String() args) { // TODO Auto-generated method stub Robot robot; try { robot = new Robot(); robot.mouseMove(0, 900); robot.delay(1000); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.delay(1000); robot.mouseMove(300, 490); robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); robot.delay(1000); robot.mouseMove(400, 690); robot.delay(1000); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.delay(1000); robot.mouseMove(1300, 150); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
このコードスニペットは通常、開始アイコンからシステム構成の表示までを処理します。同様の概念を使用して、Webページでの操作の開始中または操作の間にウィンドウポップアップの生成を処理することもできます。
ロボットJavaを既存のJava + Seleniumフレームワークに組み込むためのヒント
次に、上記のコードを変更して、既存のSelenium + Javaフレームワークに対応できるようにする方法を見ていきます。
これは概念であり、同じことを実現する方法は他にもたくさんあることに注意してください。プロジェクトごとに異なる可能性のあるビジネスニーズを満たすために、この概念をさらに拡張/変更できます。
まず、すべての共通またはRobotクラスで利用可能なメソッドを保持するクラスを作成します。これにより、必要なときにいつでも、テストケースを作成している他のクラスでそれらのメソッドを利用できます。
以下のコードスニペットはこれを示しています。
import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; public class CommonRobotMethods { Robot robot; int a= 0,b= 900; //This value can be exported from property file or excel sheet instead of direct input to the code public void LeftClickMouse() throws AWTException { robot = new Robot(); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); } public void MiddleClickMouse() throws AWTException { robot = new Robot(); robot.mousePress(InputEvent.BUTTON2_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK); } public void RightClickMouse() throws AWTException { robot = new Robot(); robot.mousePress(InputEvent.BUTTON2_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK); } public void MouseMove(int x, int y) throws AWTException { robot = new Robot(); robot.mouseMove(x,y); } public void KeyPressCTRL() throws AWTException { robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); } public void KeyReleaseCTRL() throws AWTException { robot = new Robot(); robot.keyRelease(KeyEvent.VK_CONTROL); } public void KeyPressV() throws AWTException { robot = new Robot(); robot.keyPress(KeyEvent.VK_V); } public void KeyReleaseV() throws AWTException { robot = new Robot(); robot.keyRelease(KeyEvent.VK_V); } public String RobotJavaMethods(String utilityMethod) { switch(utilityMethod) { case 'LeftClickMouse': try { LeftClickMouse(); } catch(AWTException e) { //Write any thing to track the error } break; case 'MiddleClickMouse': try { MiddleClickMouse(); } catch(AWTException e) { //Write any thing to track the error } break; case 'RightClickMouse': try { RightClickMouse(); } catch(AWTException e) { //Write any thing to track the error } break; case 'MouseMove': try { MouseMove(a,b); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyPressCTRL': try { KeyPressCTRL(); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyReleaseCTRL': try { KeyReleaseCTRL(); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyPressV': try { KeyPressV(); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyReleaseV': try { KeyReleaseV(); } catch(AWTException e) { //Write any thing to track the error } break; default: System.out.println('UnHandled error'); } return utilityMethod; } }
ここではいくつかの方法を採用しましたが、プロジェクトのニーズに応じて他の方法を同様に追加できます。
各メソッドは1つのswitchcaseに関連付けられているため、caseキーワードは必要なときにいつでもどこでも使用できます。
次に、RTFエディターを自動化するために作成したコードを変換する方法を見てみましょう。
以下のコードスニペットを参照して、それを理解してください。
import java.awt.Robot; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.KeyEvent; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class seleniumFramework { public void actualOperationalMethod() throws InterruptedException { CommonRobotMethods cm = new CommonRobotMethods(); System.setProperty('webdriver.chrome.driver', UtilityPathandLoc.Chromedriver_path); WebDriver driver =new ChromeDriver(); driver.get(UtilityPathandLoc.APPURL); driver.manage().window().maximize(); driver.findElement(By.xpath(UtilityPathandLoc.Bold_loc)).click(); String text = UtilityPathandLoc.First_input; StringSelection stringSelection = new StringSelection(text); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, stringSelection); cm.RobotJavaMethods('KeyPressCTRL'); cm.RobotJavaMethods('KeyPressV'); cm.RobotJavaMethods('KeyReleaseV'); cm.RobotJavaMethods('KeyReleaseCTRL'); Thread.sleep(1000); String text1 = UtilityPathandLoc.Second_input; StringSelection stringSelection1 = new StringSelection(text1); Clipboard clipboard1 = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard1.setContents(stringSelection1, stringSelection1); cm.RobotJavaMethods('KeyPressCTRL'); cm.RobotJavaMethods('KeyPressV'); cm.RobotJavaMethods('KeyReleaseV'); cm.RobotJavaMethods('KeyReleaseCTRL'); driver.findElement(By.xpath(UtilityPathandLoc.Italics_loc)).click(); } public static void main(String args()) { seleniumFramework s1 = new seleniumFramework(); try { s1.actualOperationalMethod(); } catch (InterruptedException e) { e.printStackTrace(); } } }
seleniumFrameworkクラス内にCommonRobotMethodsクラスのオブジェクトを作成し、を介してCommonRobotMethodsクラスで定義されたメソッドにアクセスしています。 CommonRobotMethodsクラスで定義されたキーワードを切り替えます。
ここでは、外部化できるすべての入力を書き留めるためのインターフェースを作成しました。しかし、快適さのレベルやビジネスニーズに応じて、Excel /プロパティまたはインターフェイスを分割して書き込むことができます。
public interface UtilityPathandLoc { String APPURL= 'https://www.tinymce.com'; String Chromedriver_path = 'D://chromedriver//chromedriver.exe'; String Bold_loc = '(//div(contains(@aria-label,'Bold'))//i(contains(@class,'mce-i-bold')))(1)'; String Italics_loc = '(//div(contains(@aria-label,'Italic'))//i(contains(@class,'mce-i-italic')))(1)'; String First_input = 'Welcome to the world of automation.'; String Second_input = 'Hope you enjoy This'; }
結論
うまくいけば、Selenium + Javaフレームワーク内でRobotClassを利用する方法が明確になりました。この記事が興味深く、概念を学ぶのに役立つことを皆さんが見つけてくれることを願っています。