检查每页是否存在元素

时间:2015-05-11 09:51:53

标签: selenium webdriver

这是我正在测试一个Web应用程序的场景,我要做的第一件事就是编写一个测试,检查是否存在'报告no.x'在每一页上。 注意:X的值在页面上变化,就像在主页上一样,在其他页面上是1,它是3等。 有没有办法,我可以做到这一点减少我的代码行数。喜欢而不是为每个页面编写IF Else我导航到可以有一个解决方案,我可能必须写如果只有一次,该块每次执行打开一个新页面。

1 个答案:

答案 0 :(得分:0)

您可以通过页面对象模式和基类之间的组合来实现所需的行为。

public class BingMainPage
{
    private readonly IWebDriver driver;
    private readonly string url = @"http://www.bing.com/";

    public BingMainPage(IWebDriver browser)
    {
        this.driver = browser;
        PageFactory.InitElements(browser, this);
    }

    [FindsBy(How = How.Id, Using = "sb_form_q")]
    public IWebElement SearchBox { get; set; }

    [FindsBy(How = How.Id, Using = "sb_form_go")]
    public IWebElement GoButton { get; set; }

    [FindsBy(How = How.Id, Using = "b_tween")]
    public IWebElement ResultsCountDiv { get; set; }

    public void Navigate()
    {
        this.driver.Navigate().GoToUrl(this.url);            
    }

    public void Search(string textToType)
    {
        this.SearchBox.Clear();
        this.SearchBox.SendKeys(textToType);
        this.GoButton.Click();
    }

    public void ValidateResultsCount(string expectedCount)
    {
        Assert.IsTrue(this.ResultsCountDiv.Text.Contains(expectedCount), "The results DIV doesn't contains the specified text.");
    }
}

如果这是您的某个页面,您可以创建一个基类来派生。在那里你可以有X值属性和wait方法。子类应该从这个类派生并传递X的确切值。这样你就可以在所有的测试中重用逻辑。

您可以在此处找到更详细的示例:http://automatetheplanet.com/page-object-pattern/