使用Selenium Web Driver检索HTML输入的值

时间:2011-10-21 16:17:28

标签: java selenium selenium-webdriver

在webapp的HTML中,有以下代码

<input type="text" name="prettyTime" id="prettyTime" class="ui-state-disabled prettyTime"  readonly="readonly">

页面上实际显示的是显示时间的字符串。

在Selenium Web Driver中,我有一个WebElement对象引用<input>使用

WebElement timeStamp = waitForElement(By.id("prettyTime"));

我希望获得WebElement的值,或者换句话说,获取页面上打印的内容。我尝试了所有WebElement个getter,没有任何东西检索到用户看到的实际值。有帮助吗?感谢。

10 个答案:

答案 0 :(得分:175)

尝试element.getAttribute("value")

text属性用于元素标记内的文本。对于输入元素,显示的文本不会被<input>标记包裹,而是位于value属性中。

注意:案件很重要。如果指定“值”,则会返回“null”值。对于C#来说至少是这样。

答案 1 :(得分:20)

你可以这样做:

webelement time=driver.findElement(By.id("input_name")).getAttribute("value");

这将为您提供在网页上显示的时间。

答案 2 :(得分:15)

使用硒2,

我通常这样写:

WebElement element = driver.findElement(By.id("input_name"));
String elementval = element.getAttribute("value");

OR

String elementval = driver.findElement(By.id("input_name")).getAttribute("value");

答案 3 :(得分:5)

按照@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

答案 4 :(得分:4)

如前所述,你可以做那样的事情

public String getVal(WebElement webElement) {
    JavascriptExecutor e = (JavascriptExecutor) driver;
    return (String) e.executeScript(String.format("return $('#%s').val();", webElement.getAttribute("id")));
}

但正如您所看到的,您的元素必须具有id属性,并且页面上还有jquery。

答案 5 :(得分:4)

对于python绑定,它将是:

element.get_attribute('value')

答案 6 :(得分:1)

如果输入值由一个涉及一些延迟的脚本填充(例如AJAX调用),那么您需要等到输入已填充。 E.g。

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

答案 7 :(得分:1)

JAVA 用户:

要获取页面上打印的内容,我们需要使用 getText() 方法。

getText() 方法

getText() 方法返回网络元素的可见内部文本。

getAttribute() 方法

另一方面,getAttribute() 方法获取我们希望检索的属性的值。

示例:

<input name="Title" type="text" value="LambdaTest" /> Welcome to LambdaTest </input>

getText()

driver.findElement(By.name("Title")).getText();

以上代码的输出 => 欢迎使用 LambdaTest

getAttribute():

  1. driver.findElement(By.name("Title")).getAttribute("value");

    以上代码的输出 => LambdaTest

  2. driver.findElement(By.name("Title")).getAttribute("type");

    以上代码的输出 => 文本

源代码:https://www.lambdatest.com/blog/how-to-get-text-of-an-element-in-selenium/#Difference

答案 8 :(得分:0)

element.GetAttribute(“ value”);

但是,如果在html dom中看不到“ value”属性,则会在GUI上显示字段值。

答案 9 :(得分:-1)

这有点hacky,但它确实有效。

我使用JavascriptExecutor并在HTML中添加了div,并将div中的文字更改为$('#prettyTime').val()我然后使用Selenium检索{{1}抓住它的价值。在测试了值的正确性后,我删除了刚刚创建的div。