NoSuchElementException, когда PageFactory не используется

Поскольку PageFactory устарела в последней версии Selenium C#, я пытаюсь переписать существующие объекты PageObject, как показано в приведенном ниже фрагменте кода. Все работает как и прежде, за исключением случаев, когда элементы еще не загружены. Я написал ExplicitWaitConditions перед взаимодействием с ними, но я получаю исключение NoSuchElementException в самом FindElement(By.Id("email")) до того, как оно достигнет ExplicitWaitConditions. Он отлично работает, когда я использую PageFactory. Помощь и предложения очень ценятся

        private IWebDriver driver;
        public LoginPage(IWebDriver _driver)
        {
            driver = _driver;
            //if (driver != null)
            //{
            //    PageFactory.InitElements(driver, this);
            //}
        }

        //[FindsBy(How = How.Id, Using = "email")]
        //public IWebElement txtUserName { get; set; }

        //No such element exception is thrown by below line
        public IWebElement txtUserName => driver.FindElement(By.Id("email"));

В основном я пытаюсь понять, как добиться ленивой инициализации без использования PageFactory. Поскольку ошибка выдается еще до того, как элемент будет доступен.


person Amith YR    schedule 15.10.2019    source источник


Ответы (1)


Попробуйте добавить «это», как показано ниже.

  private IWebDriver _driver;
    public LoginPage(IWebDriver _driver)
    {
        this._driver = _driver;
    }

private IWebElement FooElement
    {
        get
        {
            return this._driver.FindElement(By.Id("foo"));
        }
    }
person Salman Arshad    schedule 16.10.2019
comment
Отредактировал вопрос, дайте мне знать, если у вас есть какие-либо идеи о ленивой инициализации WebElements. - person Amith YR; 16.10.2019
comment
Пробовал и это. Несмотря на то, что парень ДжимЭванс упомянул в проблеме github, что код, который вы разместили выше, инициализирован лениво, это не так. Для справки, я говорю о проблеме с github отсюда github.com/SeleniumHQ/selenium/issues/ 4387. В любом случае, я закончил тем, что использовал пакет nuget SeleniumExtras.PageObjects для PageFactory, но мне хотелось бы знать, как можно добиться ленивой инициализации. - person Amith YR; 16.10.2019