Seleniumを使用してWebアプリケーションのテストスクリプトを記録しています。
アプリケーションの一部のページには、データベース内のレコードのリストを表すテーブルが含まれています。テーブルの行に添付されたjqueryクリックハンドラーがあります。これは、ユーザーがテーブルの行をクリックしたときに関連するレコードを編集できるようにするページをロードします。
残念ながら、SeleniumIDEはテーブル行のクリックを記録しません。コードを確認しましたが、関連する関数は次のとおりです。
Recorder.prototype.findClickableElement = function(e) {
if (!e.tagName) return null;
var tagName = e.tagName.toLowerCase();
var type = e.type;
if (e.hasAttribute("onclick") || e.hasAttribute("href") || tagName == "button" ||
(tagName == "input" &&
(type == "submit" || type == "button" || type == "image" || type == "radio" || type == "checkbox" || type == "reset"))) {
return e;
} else {
if (e.parentNode != null) {
return this.findClickableElement(e.parentNode);
} else {
return null;
}
}
}
以下を追加して、これを変更しようとしました。
if($ && $._data) {
var ev = $._data(e, "events");
if(ev && ev.click)
return e;
}
ただし、$ ._ dataはnullです!
同じWebページを開いた状態でFirebugの同じ変数を見ると、$ ._ dataが存在し、$ ._ data(e、 "events")。clickも存在します。
なぜFirebugにあるのかわかりませんが、Seleniumにはありません。Seleniumが異なるコンテキストで実行されている可能性があるため、2つの異なる「$」変数などがありますか?