1

私は 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
4

1 に答える 1

0

or 演算子を使用するのはどうですか? 両方のログインが同じ場合、ページ上のロケーターに値が送信されます。

 [FindsBy(How = How.Id, Using = "user | UserName")]

またはXPath

 [FindsBy(How = How.XPath, Using = "//input[@id='user'] | //input[@id='UserName']")]  
于 2019-06-19T23:12:07.170 に答える