0

perl と TAP を使用して、多くの Selenium テストを作成し、それらを *.t ファイルに保存しました。

いくつかのヘルパー関数を作成し、My::Util::SeleniumHelper などの非オブジェクト指向パッケージに入れました。

すべての関数は、このモジュールからエクスポートされます。最初は 1 つのパッケージで十分でしたが、現在では単一モジュール API に関連のない関数が多数含まれています。これらの関数は、make_sel()、head_ok()、cms_logout()、cms_login()、cms_clickthru_simple()、selenium_rc_running()、treecontrol_toggles() などで呼び出されます。

さらに、t ファイル内の多くのコード ブロックは依然として冗長であるため、.t ファイルはテンプレートのように見えます。

したがって、*.t コードをよりオブジェクト指向のデザインにしたいと考えています。

新しい API の設計方法に関するアイデアはありますか?

基本的に、誰かが巧妙な方法でセレン オブジェクトを拡張したコード例 (ここまたはインターネット上) も探しています。perl である必要はありません。

Test::WWW::Selenium オブジェクト $sel にメソッドを追加すると便利でしょうか?

$sel->my_click_ok()

$sel オブジェクトをオーバーライドする必要がありますか?, Test::WWW::Selenium::Customized クラスを Test::WWW::Selenium から派生させる

これは、 「継承よりも構成を優先する」というイディオムに違反します。

コンポジションを使用してセレンオブジェクトを別のオブジェクトにラップする必要がありますか?

$myobj->{sel}->click_ok()

以下に、さらにいくつかの要件または考えを示します。

pageObjects Pattern/Idiomも使用したいと思います。まだそうしていません。たぶんそう

$myobj->{current_page}->loginbox

また

$myobj->do_stuff($current_page->loginbox)

ほとんどの場合、基本的には、ムースの around() 修飾子のようなものをセレン メソッドに与えたいと思います。標準的なことを行いますが、前後にいくつかのことを行います。

ただし、テストはいくつかの異なるマシンで実行する必要があり、これらすべての PC に Moose とそのすべての依存関係をインストールしたくないため、ここでは Moose を使用しないことを好みます。ムースを使用することが不可能だと言っているわけではありませんが、ムース以外のオブジェクト (Test::WWW::Selenium) とムース オブジェクトを一緒に使用したことはありません。

4

3 に答える 3

1

Test::WWW::Selenium をサブクラス化しています。new {} は SUPER を呼び出す必要がありますが、見た目も味も親と同じです。HTML をリントし、リンクをチェックする新しい open() があります (もちろんメモ化されています)。

于 2012-05-18T12:40:13.847 に答える
1

この場合、Selenium から継承するカスタム クラスを作成することは完全に理にかなっているように思えます。Eric の Moose 委任ソリューションは、少しすっきりしています。しかし、もう少し複雑です。

于 2011-06-10T08:58:34.340 に答える
1

Moose と委譲を使用して Test::WWW::Selenium を拡張しています。拡張機能に含まれるのは、構成要素 (ホスト、ポート、ブラウザーなど) だけです。他のすべては役割にあります。

于 2011-06-10T07:54:16.343 に答える