私は Selenium と C# を使用した自動化プロジェクトに取り組んでいます。Page Object パターンを使用して各ページを (ロケーターと共に) 定義し、Test クラスでテストを個別に定義します。ページの基本クラスである Page クラスがあり、そこで呼び出します。 PageFactory.InitElements (webDriver, this);
すべてのページに共通のメソッドを定義します。次に、各ページが Page から継承され、対応する要素が @FindBy アノテーションを使用して定義されます。
[FindsBy (How = How.Id, Using = "UserName")]
public IWebElement UserName {get; set; }
[FindsBy(How = How.Id, Using = "UserPass")]
public IWebElement Password { get; set; }
[FindsBy(How = How.Id, Using = "login-btn")]
public IWebElement SubmitButton { get; set; }
新しいログイン ページが追加され、両方 (新しいログインと古いログイン) を維持し、両方のページでテストを実行できるようにする必要があります。両方のページには同じ要素 (ロケーターではない)があり、次のような同じメソッドに応答できる必要があります。 LoginPage と NewLoginPage (どちらも BaseLogin から継承)。BaseLogin では要素 (IWebElement) と共通メソッドを定義できます。次に、各サブクラスで、各要素を対応するロケーターに関連付け/関連付けます。
これは、各ページでページを操作できるようにするコードを繰り返さないようにするためです。
public class BaseLoginPage : Page
{
protected IWebElement UserName { get; set; }
protected IWebElement Password { get; set; }
protected IWebElement SubmitButton { get; set; }
}
// BaseLogin just define the IWebElement without assign a specific locator.
要素「IWebElement UserName」を対応するロケーターに関連付けるにはどうすればよいですか?
[FindsBy(How = How.Id, Using = "UserName")] --> in LoginPage Class
[FindsBy(How = How.Id, Using = "user")] --> in NewLoginPage Class