0

我有很多 Page 类可以用于我的测试自动化。它们中的每一个都具有以下三个基本要素:

  1. 网络驱动程序
  2. 乌里
  3. 该页面的基本元素。

我决定为所有页面类创建一个基类,如下所示:

internal class Page
{
    protected IWebDriver _webDriver;
    protected string _uri;
    protected By _essentialElementCriteria;

    internal Page(IWebDriver driver, WebDriverPageType pageType, string uri, By criteria)
    {
        try
        {
            PageLoader.LoadPage(driver, _uri, new SearchAndWaitCriteria(_essentialElementCriteria));
            this._webDriver = driver;
        }
        catch (Exception exc) { throw new PageLoadFailedException(pageType, exc); }
    }
}

派生类如下所示:

internal class LoginPage : Page
{
    internal LoginPage(IWebDriver driver)
       : base (driver, WebDriverPageType.LoginPage, "loginpage_url", By.Id("xyz")) { }        

    // Other LoginPage specific methods like Login().
}

PageLoader 类如下:

internal class PageLoader
{
    internal static void LoadPage(IWebDriver driver, string uri, SearchAndWaitCriteria criteria)
    {
         if (driver == null) throw new ArgumentNullException("WebDriver is null.");

         driver.Navigate().GoToUrl(uri);
         var waitElement = driver.WaitForElement(criteria.SearchCriteria, criteria.MaximumWaitSeconds, criteria.SleepMilliSecondsBetweenTwoSearches);
         if (waitElement == null) throw new NotFoundException(String.Format("Failed to find the waitElement. Element details: {0}", criteria.SearchCriteria.ToString()));
    }

    internal static bool IsPageLoaded(IWebDriver driver, SearchAndWaitCriteria criteria)
    {
         IWebElement essentialElement = driver.GetElement(criteria.SearchCriteria);
         return essentialElement != null;
    }
}

我的基本想法是避免编写构建页面的相同代码,因为我将创建很多页面类。因此,在 PageLoader 类的帮助下,我将该代码“共享”到了基类中。我仍然认为有些地方不太对劲。我已经负责向基类抛出异常,这很好。但是,我需要将派生类的 PageType 作为参数提供给基类​​来做到这一点,这对我来说似乎并不好。

您可以在此设计中提出哪些改进建议?我应该消除基类,并改用组合吗?我想我也许可以合并 PageLoader 和 Page 类来实现这一点。不确定这个想法,只是一个想法。

4

0 回答 0