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