Testlinkでテストケースをユーザに一括アサインするスクリプトを書いてみた

Testlinkでテストケースをユーザにアサインするのがとても面倒だったので、一括アサインするGreasemonkeyスクリプトを書いてみた。
インストールすると、一番上の実行ボタンの横にAll Asignボタンが表示されてクリックすると、横のプルダウンメニューで選ばれたユーザが下の全てのテストケースにアサインされます。

今使っているTestlinkはver1.7.4だから、最新のTestlinkでは、このあたりのUIは改善されているかもしれないけど。
1.9のβもリリースされてるっぽいし、ちょっと今度さわってみなきゃ。

ってことで、書いたスクリプトは↓
javascripterの人はきっとxpathとかで華麗に書くんだろうけど、うまくいかなかったので、地道にやりました(汗
相変わらず汚くてすみません。

// ==UserScript==
// @name           testlink_assign_user
// @namespace      http://d.hatena.ne.jp/iox
// @description    Assign selected user to all testcase.
// @include        http://*/testlink/*
// ==/UserScript==

h1element = document.getElementsByTagName('h1');
if(h1element.length == 0)
{
	return;
}

if(h1element[0].innerHTML.match(/テストケースに実行タスクをアサインするテスト計画/))
{
	create_assign_button();
}

function create_assign_button()
{
	// 一番上の実行ボタンを検索
	var all_input_tags = document.getElementsByTagName('input');
	var exec_button;
	for(var i in all_input_tags)
	{
		if(all_input_tags[i].value == "実行")
		{
			exec_button = all_input_tags[i];
			break;
		}
	}

	// ボタン作成
	var assign_button = document.createElement('input');
	assign_button.setAttribute('type', 'button');
	assign_button.setAttribute('value', 'All Asign');

	assign_button.addEventListener('click', function() {

		// 選択されているユーザ情報を取得
		var select_user = exec_button.previousSibling.previousSibling;
		var index = select_user.selectedIndex;
		var selected_value = select_user.options[index].value;
		var selected_user = select_user.options[index].label;

		// 全てのプルダウンメニューに一番上のプルダウンメニューで選択
		// したユーザを設定
		var all_selects = document.getElementsByTagName('select');
		for(var j in all_selects)
		{
			var options = all_selects[j].options;

			for(var k in options)
			{
				if(options[k].value == select_user.value)
				{
					options[k].selected = true;
					break;
				}
			}
		}
    }, false);

	// ボタン配置
	exec_button.parentNode.insertBefore(assign_button, exec_button.nextSibling);
}