Использование веб-драйвера Selenium для получения значения ввода HTML
в HTML веб-приложения есть следующий код
<input type="text" name="prettyTime" id="prettyTime" class="ui-state-disabled prettyTime" readonly="readonly">
то, что на самом деле показано на странице-это строка, отображающая время.
в веб-драйвере Selenium у меня есть WebElement
объект, относящийся к <input>
используя
WebElement timeStamp = waitForElement(By.id("prettyTime"));
Я хочу получить значение WebElement
, или, другими словами, то, что печатается на странице. Я перепробовал все WebElement
геттеры и ничто не извлекает фактическое значение, которое видит пользователь. Какая-нибудь помощь? Спасибо.
8 ответов:
попробовать
element.getAttribute("value")
The
text
свойство предназначено для текста в тегах элемента. Для элементов ввода отображаемый текст не оборачивается<input>
тег, вместо этого он находится внутри .Примечание: дело имеет значение. Если указать "значение", вы получите значение null значение. Это верно, по крайней мере, для C#.
вы можете сделать так:
webelement time=driver.findElement(By.id("input_name")).getAttribute("value");
это даст вам время отображения на странице.
с селеном 2,
Я обычно пишу так :
WebElement element = driver.findElement(By.id("input_name")); String elementval = element.getAttribute("value");
или
String elementval = driver.findElement(By.id("input_name")).getAttribute("value");
после ответа @ragzzy я использую
public static string Value(this IWebElement element, IJavaScriptExecutor javaScriptExecutor) { try { string value = javaScriptExecutor.ExecuteScript("return arguments[0].value", element) as string; return value; } catch (Exception) { return null; } }
он работает довольно хорошо и не изменяет DOM
Как уже было сказано, вы могли бы сделать что-то подобное
public String getVal(WebElement webElement) { JavascriptExecutor e = (JavascriptExecutor) driver; return (String) e.executeScript(String.format("return $('#%s').val();", webElement.getAttribute("id"))); }
но, как вы можете видеть, ваш элемент должен иметь
Если входное значение заполняется скриптом, который имеет некоторую задержку (например, вызов AJAX), то вам нужно подождать, пока вход не будет заполнен. Е. Г.
var w = new WebDriverWait(WebBrowser, TimeSpan.FromSeconds(10)); w.Until((d) => { // Wait until the input has a value... var elements = d.FindElements(By.Name(name)); var ele = elements.SingleOrDefault(); if (ele != null) { // Found a single element if (ele.GetAttribute("value") != "") { // We have a value now return true; } } return false; }); var e = WebBrowser.Current.FindElement(By.Name(name)); if (e.GetAttribute("value") != value) { Assert.Fail("Result contains a field named '{0}', but its value is '{1}', not '{2}' as expected", name, e.GetAttribute("value"), value); }