Arhn - архитектура программирования

Нет такого сеанса. PageFactory не может инициализировать элемент (C#)

Я умоляю тебя о помощи!

Я использую PageFactory для инициализации моего PageOjbect. Один PageObject вызывается двумя разными классами (также PageObjects). Когда я вызываю его из первого класса, проблем нет. Но когда я вызываю его из второго класса, появляется ошибка «нет такой сессии».

Отлаживая свой код, я понял, что у меня возникает эта ошибка, когда 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)

Selenium v. 2.42 Chrome v. 37.0.2062.103 Драйвер Chrome v 2.10

08.09.2014

  • Это сбивает с толку, и вы дали слишком много кода, который кажется не связанным с проблемой. Что такое точная ошибка и трассировка стека? Скопируйте это сюда, не просто сообщение, а все. На какой строке это происходит? Как часто? Все время? Какие браузеры? Какая версия этого браузера? Какая версия Селена? 08.09.2014
  • Он появляется в разных строках. Но все строки используют элементы страницы. Добавил дополнительную информацию к своему первому сообщению. Спасибо за совет. 08.09.2014
  • Прочитайте это: stackoverflow.com/help/mcve 08.09.2014

Ответы:


1

Ребята, ответ на мою проблему: никогда не используйте деструктор в базовом классе. В классе, унаследованном другими, были такие строки кода, как:

 ~DriverCover
 {
      driver.Dispose();
      driver.Quit();
 }
09.09.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..