多くのページ オブジェクトを直接呼び出すのではなく、1 つのナビゲーター オブジェクトを介してすべてのメソッドを呼び出したいと考えています。
Navigator パターンは、彼にメソッドを Page Objects に渡す前、後、または渡す代わりに、いくつかの追加のことを行うために存在します。
だから、ナビゲーターパターンをC#で実装する方法を見つけました(そしてそれはデリゲートを使用します)が、Javaで書かれた私のプロジェクトとすべてのセレン自動化テストフレームワーク(Selenium、Java、およびTestngを使用する)もそうでなければなりません.
Java で次のコード (Navigator パターン) を記述するにはどうすればよいですか? (Java にはデリゲート機能はありません)。
ナビゲーター インターフェイス:
public interface INavigator
{
TT Open<tt>() where TT : PageBase, new();
TT Navigate<tt>(Action action) where TT : PageBase, new();
void ClickAndWaitForText(Action action, string text);
...
}
}
ナビゲーターの使用法は次のようなものです:
[TestFixture]
public class LoginTest
{
private SeleniumScope _scope;
private INavigator _navigator;
[TestFixtureSetUp]
public void Setup()
{
_scope = new SeleniumScope();
_navigator = new Navigator(_scope.Selenium);
}
[Test]
public void Login()
{
var login = _navigator.Open<LoginPage>();
login.User.SetText("admin");
login.Password.SetText("god");
_navigator.Navigate<HomePage>(login.ClickLogin);
}
PS ご覧のとおり、C# では見栄えがしますが、Java でナビゲーター パターンを作成するにはどうすればよいですか?
しかし、Java で Navigator パターンを正しく実装するにはどうすればよいでしょうか。たとえば、_navigator.Navigate(login.ClickLogin);。_navigator は、適切なオブジェクト "HomePage" に対して渡されたメソッド "login.ClickLogin" を実行する前に処理する必要があります (たとえば、waitFor() を追加するなど)。C# とは異なり、Java にはデリゲート機能がありません。