seleniumアクションのシミュレーションドラッグを無効にする
2004 ワード
最近のUIオートメーションでは、ページ上の要素を別の要素の位置にドラッグする必要があり、最初にフレームワークを書くときに使用したActionマウスシミュレーションイベントdragAndDropを実現し、簡単なテストで問題ありません.しかし、プロジェクトを使ってみると、この方法はまったく引きずれないので、いろいろ試してみてもだめで、最後にSeleniumのActionがHTML 5の引きずりをサポートしていないという問題があることに気づきました.
Seleniumが持っている方法が通じない以上、他の方法しか通じないので、最初に思いついたのはJavaScriptです.本人はJavaScriptに対して熟知していないで、简単に使うのはまあまあで、书いて方法を引っ张ってきっとできないで、それから各种探して、本当にこのようにする方法があります.このリンクを参照
私の解決策を紹介します.
まず、このDragAndDropメソッドを実装するJavaScriptをダウンロードします.ここは元のダウンロードアドレスです.ダウンロードできないものはここでダウンロードできます.抽出コードはwneeです.
次にjsを導入する.私の環境を話します:Java+TestNG+Selenium 3はUI自動化を実現して、被測定サイト用のAngularフレームワーク、このjsはJQueryに基づいているので、JQueryに入ります(開発はサイトがJQueryを引用したと言っていますが、ここでは導入しないと使えません).
最後にexecuteScript()メソッドを呼び出してjsを実行します.ここで言うのはdragを呼び出すことですand_drop_helper.jsのsimulateDragDropでは、要素IDを使用したほうがいいです.IDがなければ開発者に追加できます.詳細なコードは次のとおりです.
Seleniumが持っている方法が通じない以上、他の方法しか通じないので、最初に思いついたのはJavaScriptです.本人はJavaScriptに対して熟知していないで、简単に使うのはまあまあで、书いて方法を引っ张ってきっとできないで、それから各种探して、本当にこのようにする方法があります.このリンクを参照
私の解決策を紹介します.
まず、このDragAndDropメソッドを実装するJavaScriptをダウンロードします.ここは元のダウンロードアドレスです.ダウンロードできないものはここでダウンロードできます.抽出コードはwneeです.
次にjsを導入する.私の環境を話します:Java+TestNG+Selenium 3はUI自動化を実現して、被測定サイト用のAngularフレームワーク、このjsはJQueryに基づいているので、JQueryに入ります(開発はサイトがJQueryを引用したと言っていますが、ここでは導入しないと使えません).
最後にexecuteScript()メソッドを呼び出してjsを実行します.ここで言うのはdragを呼び出すことですand_drop_helper.jsのsimulateDragDropでは、要素IDを使用したほうがいいです.IDがなければ開発者に追加できます.詳細なコードは次のとおりです.
// jQuery
String jquery_str="";
File jquery_file = new File("./tools/jquery-3.3.1.js");
try {
FileInputStream in=new FileInputStream(jquery_file);
int size=in.available();
byte[] buffer=new byte[size];
in.read(buffer);
in.close();
jquery_str=new String(buffer,"GB2312");
}catch (IOException e) {
e.printStackTrace();
Logger.Output(LogType.LogTypeName.ERROR, "jquery-3.3.1.js !"+ e.getMessage());
}
// drag_and_drop_helper.js str
String dnd_str="";
File dnd_file = new File("./tools/drag_and_drop_helper.js");
try {
FileInputStream in=new FileInputStream(dnd_file);
int size=in.available();
byte[] buffer=new byte[size];
in.read(buffer);
in.close();
dnd_str=new String(buffer,"GB2312");
}catch (IOException e) {
e.printStackTrace();
Logger.Output(LogType.LogTypeName.ERROR, "drag_and_drop_helper.js !"+ e.getMessage());
}
// JS
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript(jquery_str + dnd_str + "$('#element_ID').simulateDragDrop({ dropTarget: '#target_element_id'});");