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),因为搜索单击会将你重定向到另一个页面。