【问题标题】:No such session. PageFactory cannot initialize an element (C#)没有这样的会议。 PageFactory 无法初始化元素(C#)
【发布时间】:2014-09-08 14:54:12
【问题描述】:

我求你帮忙!

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

调试我的代码时,我意识到当 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);

还有 bookFormatChoosing.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.42 铬诉 37.0.2062.103 Chrome 驱动程序 v 2.10

【问题讨论】:

  • 这很令人困惑,而且您已经给出了太多看起来与问题无关的代码。 exact 错误和堆栈跟踪是什么?复制到这里,不仅仅是消息,而是整个的东西。这发生在哪条线上?多常?每时每刻?什么浏览器?那个浏览器是什么版本的?什么版本的 Selenium?
  • 它出现在不同的行。但是所有的行都在使用页面的元素。我为我的第一篇文章添加了额外的信息。感谢您的建议。

标签: c# selenium webdriver


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多