[Заметка] WebDriver. Метод-расширение для C#, возвращающий значение элемента для input и select тегов

Как многие уже успели заметить, а особенно в начале работы с Selenium WebDriver, свойство Text у IWebElement, не всегда возвращает ожидаемое значение.
Например, для многострочного текстового поля:

<textarea id=”mytext”>Hello</textarea >

Свойство .Text: driver.FindElement(By.Id(“mytext”)).Text – вернет ожидаемый результат, т.е. значение «Hello».
А вот для тега, описывающего однострочное текстовое поле:

<input type=”text” value=”SingleLine Hello”> – почему-то будет всегда возвращать пустую строку, вместо ожидаемого
текста ”SingleLine Hello”.

Тут все дело в том, что стандартный element.Text из IWebElement – всегда возвращает текст, заключенный внутри открытого и закрытого тэга, а в случае с input, нужно прочитать не текст внутри, а атрибут с именем “value”.

Аналогично для выпадающего списка, образуемого элементов select: в начале, нужно найти выбранный элемент <option> внутри select, а потом взять его текст.

Для решения проблемы, я создал следующий метод расширение, который вызывается для веб-элемента следующим образом:

string elementText = driver.FindElement(By.Id(“mytext”)).GetElementText();

Реализация:

using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;

namespace Demo.Extensions
{
    public static class MyWebElementExtensions
    {
        /// <summary>
        /// Returns tag-specific element value
        /// </summary>
        public static string GetElementText(this IWebElement element)
        {
            string result = "";
            string tag = element.TagName.ToLower();

            switch (tag)
            {
                case "input":
                    result = element.GetAttribute("value");
                    break;
                case "select":
                    result = new SelectElement(element).SelectedOption.Text;
                    break;
                default:
                    result = element.Text;
                    break;
            }
            return result;
        }
    }
}
3 лайка