BitrixAQA.Selenium.Framework.WebItem.SelectItemByText C# (CSharp) Method

SelectItemByText() public method

Метод выбирает значение из выпадающего списка по тексту. Метод выбирает элемент по найденному вхождению. Аналог SelectElement.SelectByText()
public SelectItemByText ( string text ) : void
text string Значение списка, которое надо выбрать
return void
        public void SelectItemByText(string text)
        {
            try
            {
                var selectElement = new SelectElement(BitrixFramework.FindWebElement(this));
                var allOptionsThatHaveText = selectElement.Options.Where(se => se.Text.Equals(text, StringComparison.OrdinalIgnoreCase));
                if (allOptionsThatHaveText.Any())
                {
                    foreach (var option in allOptionsThatHaveText)
                    {
                        try
                        {
                            option.Click();
                        }
                        catch (StaleElementReferenceException)
                        {
                            Log.MesQuestion("Изменился DOM страницы, и элемента " + this.description + " больше нет в кеше. Подождем 5 сек и попробуем найти его ещё разок");
                            BitrixFramework.Wait(5);
                            try
                            {
                                option.Click();
                            }
                            catch
                            {
                                Log.MesError("Не найден объект \"" + this.description + "\" по пути \"" + this.by.ToString() + "\"");
                                throw;
                            }
                        }
                    }

                    Log.MesNormal(String.Format("'{0}' -> Выбрано значение '{1}'", description, text));

                    //проверяем страницу на наличие ошибок
                    BitrixFramework.CheckJSErrors();
                    GM.CheckContentOnErrors();

                    return;
                }

                var optionWithText = selectElement.Options.Where(option => option.Text.IndexOf(text, StringComparison.OrdinalIgnoreCase) >= 0);
                if (optionWithText.Any())
                {
                    foreach (var option in optionWithText)
                    {
                        try
                        {
                            option.Click();
                        }
                        catch (StaleElementReferenceException)
                        {
                            Log.MesQuestion("Изменился DOM страницы, и элемента " + this.description + " больше нет в кеше. Подождем 5 сек и попробуем найти его ещё разок");
                            BitrixFramework.Wait(5);
                            try
                            {
                                option.Click();
                            }
                            catch
                            {
                                Log.MesError("Не найден объект \"" + this.description + "\" по пути \"" + this.by.ToString() + "\"");
                                throw;
                            }
                        }
                    }

                    Log.MesNormal(String.Format("'{0}' -> Выбрано значение '{1}'", description, text));

                    //проверяем страницу на наличие ошибок
                    BitrixFramework.CheckJSErrors();
                    GM.CheckContentOnErrors();

                    return;
                }

                allOptionsThatHaveText = selectElement.Options.Where(se => se.Text.Contains(text));
                if (allOptionsThatHaveText.Any())
                {
                    foreach (var option in allOptionsThatHaveText)
                    {
                        try
                        {
                            option.Click();
                        }
                        catch (StaleElementReferenceException)
                        {
                            Log.MesQuestion("Изменился DOM страницы, и элемента " + this.description + " больше нет в кеше. Подождем 5 сек и попробуем найти его ещё разок");
                            BitrixFramework.Wait(5);
                            try
                            {
                                option.Click();
                            }
                            catch
                            {
                                Log.MesError("Не найден объект \"" + this.description + "\" по пути \"" + this.by.ToString() + "\"");
                                throw;
                            }
                        }
                    }

                    Log.MesNormal(String.Format("'{0}' -> Выбрано значение '{1}'", description, text));

                    //проверяем страницу на наличие ошибок
                    BitrixFramework.CheckJSErrors();
                    GM.CheckContentOnErrors();

                    return;
                }

                throw new NoSuchElementException(string.Format("Нет элементов с вхождением: {0}", text));
            }
            catch { }
        }