C

頁面物件應包含行為,返回斷言資訊以及可能的初始化頁面就緒狀態方法。Selenium 使用註釋支援頁面物件。在 C#中,它如下:

using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using OpenQA.Selenium.Support.UI;
using System;
using System.Collections.Generic;

public class WikipediaHomePage
{
    private IWebDriver driver;
    private int timeout = 10;
    private By pageLoadedElement = By.ClassName("central-featured-logo");

    [FindsBy(How = How.Id, Using = "searchInput")]
    [CacheLookup]
    private IWebElement searchInput;

    [FindsBy(How = How.CssSelector, Using = ".pure-button.pure-button-primary-progressive")]
    [CacheLookup]
    private IWebElement searchButton;

    public ResultsPage Search(string query) 
    {
        searchInput.SendKeys(query);
        searchButton.Click();
    }

    public WikipediaHomePage VerifyPageLoaded() 
    {
        new WebDriverWait(driver, TimeSpan.FromSeconds(timeout)).Until<bool>((drv) =>  return drv.ExpectedConditions.ElementExists(pageLoadedElement));

        return this;
    }
}

筆記:

  • CacheLookup 將元素儲存在快取中,並儲存每次呼叫返回一個新元素。這樣可以提高效能,但不適合動態更改元素。
  • searchButton 有 2 個類名,沒有 ID,這就是為什麼我不能使用類名或 id。
  • 我確認我的定位器會使用開發人員工具(針對 Chrome)返回我想要的元素,在其他瀏覽器中,你可以使用 FireBug 或類似內容。
  • Search() 方法返回另一個頁面物件(ResultsPage),因為搜尋單擊會將你重定向到另一個頁面。