Selenium Webdriver C # В раскрывающемся списке устаревших элементов For Loop - PullRequest
0 голосов
/ 11 октября 2019

Когда я бегу по циклу For, я могу выполнить итерацию только один раз, без «значения», отображаемого как устаревшее. Что происходит, мне нужно выбрать значение из первого раскрывающегося списка, чтобы заполнить параметры для второго.

Я попытался настроить ссылки на элементы так, чтобы они не отображались как устаревшие.

//Order Type dropdown menu
        String OrderTypeDropDown = "//*[@id='OrderTypeId']";
        IWebElement drpOrderType = driver.FindElement(By.XPath(OrderTypeDropDown));            

        //Select the order type dropdown
        SelectElement select = new SelectElement(drpOrderType);

        //Make a list of all order type dropdown options 
        IList<IWebElement> elements = select.Options;        

        //Itterate through all the options in the order type dropdown
        foreach (IWebElement value in elements)
        {
            //Click the option
            value.Click();

            //Print out the option
            Console.WriteLine(value.Text);

            //Sleep
            Thread.Sleep(3000);

            //Change Type dropdown menu stale element reference setup
            String RequestChangeDropDown = "//*[@id='RequestedChange']";

            IWebElement drpChangeType = driver.FindElement(By.XPath(RequestChangeDropDown));

            //Select the Requested Change dropdown
            SelectElement drpSelect = new SelectElement(drpChangeType);
            driver.FindElement(By.XPath(RequestChangeDropDown)).Click();

            //Make a list of all Requested Change types
            IList<IWebElement> change = drpSelect.Options;

            foreach (IWebElement option in change)
            {
                Console.WriteLine(option.Text);                   
            }

        }

Сообщение об ошибке: OpenQA.Selenium.StaleElementReferenceException: устаревшая ссылка на элемент: element isне прикреплен к документу страницы (информация о сеансе: chrome = 77.0.3865.90) ​​Трассировка стека: RemoteWebDriver.UnpackAndThrowOnError (ответ errorResponse) RemoteWebDriver.Execute (параметры строки stringCommandToExecute, Dictionary`2)

1 Ответ

0 голосов
/ 14 октября 2019

Вы должны подождать, пока элемент станет кликабельным:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
            wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.XPath(RequestChangeDropDown)));

, поэтому вы можете щелкнуть по нему. Проблема в том, что вы пытаетесь щелкнуть элемент, который еще не активен в DOM!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...