Как многие уже успели заметить, а особенно в начале работы с 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;
}
}
}