Использование веб-драйвера 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 77

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);
        }

для Привязок python это будет:

element.get_attribute('value')

Это своего рода hacky, но это работает.

Я JavascriptExecutor и добавил div в HTML, и изменил текст в div to $('#prettyTime').val() затем я использовал селен для извлечения div и захватить его значение. После проверки правильности значения, я удалил div, который был только что создан.