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がなければ開発者に追加できます.詳細なコードは次のとおりです.
//  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'});");