首页 > 解决方案 > 使用页面对象模型和页面工厂时如何在 Selenium WebDriver C# 中应用隐式等待

问题描述

我在 Test 类的 SetUp 方法和页面对象的构造函数中添加了隐式等待。我需要申请等待所有测试方法。但它不起作用。任何人都可以帮忙吗?我用过 NUnit 框架

页面对象:

    namespace ProjectName.PageObjects
    {
        class SearchPage
        {
            IWebDriver driver;

            public SearchPage(IWebDriver driver)
            {
                this.driver = driver;
                PageFactory.InitElements(driver, this);
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(40);
            }
            [FindsBy(How = How.XPath, Using = "//a[text()='Search']")]
            IWebElement search;

     public void SearchClick()
     {
           search.Click();
     }
    }
  }

测试类:

namespace ProjectName
{
    class SearchTestClass
    {
        IWebDriver driver;
        SearchPage search;

        [SetUp]
        public void SetUp()
        {            
                driver = new ChromeDriver();
                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(40);
               //Go to URL
               //Login
        }

        [Test]
        public void SearchTest()
        {
            search.SearchClick();
        }
}
}

标签: c#seleniumselenium-webdriverwaitimplicitwait

解决方案


最好有一个通用类,您可以在其中将基本初始化内容作为一种方法,如下所示,并在测试方法开始之前在所有测试类中调用该方法。

并将父类 BaseTest 派生到所有测试类。

我对您的代码进行了一些修改,如下所示。

公共类 BaseTest {

IWebDriver 驱动程序;

 public static void Initialization() {
    driver = new ChromeDriver();
    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(40);
    //Go to URL
    //Login

} }

页面对象:

命名空间 ProjectName.PageObjects { 类 SearchPage { IWebDriver 驱动程序;

        public SearchPage(IWebDriver driver)
        {
            this.driver = driver;
            PageFactory.InitElements(driver, this);

        }
        [FindsBy(How = How.XPath, Using = "//a[text()='Search']")]
        IWebElement search;

 public void SearchClick()
 {
       search.Click();
 }
}

}

测试类:

命名空间项目名称 { 类 SearchTestClass {

    SearchPage search;

    [SetUp]
    public void SetUp()
    {            
           //Just call the Initialization method in every test class like here before the test methods starts execution
            Initialization();
    }

    [Test]
    public void SearchTest()
    {
        search.SearchClick();
    }

} }


推荐阅读