没有这样的会议.PageFactory无法初始化元素(C#)

本文关键字:初始化 元素 PageFactory 会议 | 更新日期: 2023-09-27 18:21:00

我求你帮忙!

我使用PageFactory初始化我的PageOjbect。一个PageObject由两个不同的类(也称为PageObects)调用。当我从firs类调用它时,没有问题。但当我从第二个类调用它时,会弹出"没有这样的会话"错误。

在调试代码时,我意识到当PageFactory没有时间查找页面的元素时,我会出现这个错误。我尝试缓存所有元素,但没有解决问题。

所以,这是我的问题类:

public class OrderSettingsPage : DriverCover
{
    public OrderSettingsPage(IWebDriver driver) : base(driver)
    {
        PageFactory.InitElements(Driver, this);
    }
    public string HowToDeliver
    {
        get; set;
    }
    [FindsBy(How = How.TagName, Using = "h1"), UsedImplicitly]
    private IWebElement _mainHeadline;
    public string MainHeadline
    {
        get { return _mainHeadline.Text; }
    }
    [FindsBy(How = How.Id, Using = "Surname"), UsedImplicitly]
    private IWebElement _surnameTextBox; 
    public IWebElement SurnameTextBox
    {
        get { return _surnameTextBox; }
    }

}

显示测试步骤的一段代码:

        IWebDriver chrome = new ChromeDriver();
        MainFunctions load = new MainFunctions(chrome);
        load.NavigateToMainPage();
        load.IfNotLoggedThenLogin();
        load.NavigateToUrl(load.BaseUrl + "books/create");
        BookThemeChoosingPage bookThemeChoosing = new BookThemeChoosingPage(chrome);
        BookFormatChoosingPage bookFormatChoosing = bookThemeChoosing.ContinueWithoutTheme();
        bookFormatChoosing.ChooseFormat();
        OrderSettingsPage orderSettings = bookFormatChoosing.Continue();
        //There is my neck pain!)
        orderSettings.SetOrderSettings(howToPay, howToDeliver);

和bookFormatSelecting.Continue()方法:

    public OrderSettingsPage Continue()
    {
        WaitAjax();
        _continueButton.Click();
        WaitAjax();
        IList<IWebElement> elements = Driver.FindElements(By.Id("loginButtonIdInBox"));
        MainFunctions load = new MainFunctions(Driver);
        if (elements.Count > 0)
        {
            load.LoginInPopUpWindow();
            WaitAjax();
        }
        WaitForPageLoading();
        int idOfAlbum = DetermineId();
        NavigateToUrl(load.BaseUrl + "order/book/" + idOfAlbum);
        return new OrderSettingsPage(Driver);
    }

那么,怎么了?所有元素都显示在页面上,下面这样的步骤不会引起所描述的问题:

        IWebDriver chrome = new ChromeDriver();
        MainFunctions load = new MainFunctions(chrome);
        load.NavigateToMainPage();
        load.IfLoggedThenLogOut();
        switch (typeOfProduct)
        {
            case ProductType.Cup:
            {
                load.NavigateToUrl(load.BaseUrl + "souvenir/create?productClass=1");
            }
            break;
           ........       
        }
        SouvenirConstructorPage constructor = new SouvenirConstructorPage(chrome);
        OrderSettingsPage orderSettings = constructor.PlaceOrder();
        //The same method doesn't couse any problem
        orderSettings.SetOrderSettings(howToPay, howToDeliver);

Nunit错误:

System.InvalidOperationException : no such session
  (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64) (NoSuchDriver)

硒v.2.42Chrome诉37.0.2062.103Chrome驱动程序版本2.10

没有这样的会议.PageFactory无法初始化元素(C#)

伙计们,我的问题的答案是:永远不要在基类中使用析构函数。在一个被其他人继承的类中,有几行代码,例如:

 ~DriverCover
 {
      driver.Dispose();
      driver.Quit();
 }