使用 Selenium WebDriver 检索 HTML 输入的值

在网页应用程式的 HTML 中,有以下代码:

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

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

在 Selenium WebDriver 中,我有一个引用 <input>WebElement对象,它使用:

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

我想得到 WebElement的值,换句话说,就是打印在页面上的内容。我尝试了所有的 WebElement getter 函数,但是没有任何东西检索到用户看到的实际值。

284673 次浏览

试试 element.getAttribute("value")

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

注意: 大小写很重要。如果你指定“ Value”,你会得到一个“ null”值。至少对 C # 来说是这样。

这有点粗俗,但很有效。

我使用了 JavascriptExecutor并在 HTML 中添加了一个 div,并将 div中的文本更改为 $('#prettyTime').val()

然后,我使用 Selenium 检索 div并获取它的值。在测试值的正确性之后,我删除了刚刚创建的 div。

如果输入值由一个有延迟的脚本填充(例如 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);
}

对于 Selenium 2,我通常这样写:

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

或者

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

正如前面提到的,你可以这样做:

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

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

你可以这样做:

webelement time = 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

对于 Python 绑定,它将是:

element.get_attribute('value')

使用

element.GetAttribute("value");

即使在 HTMLDOM 中没有看到“ value”属性,也会在 GUI 中显示字段值。

Java 用户:

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

GetText ()方法

GetText ()方法返回 web 元素的可见内部文本。

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

    上述代码的输出 = > text

资料来源: 在 Selenium WebDriver 中 getText ()和 getAttribute ()之间的区别