在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,没有任何东西检索到用户看到的实际值。有帮助吗?感谢。
答案 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():
driver.findElement(By.name("Title")).getAttribute("value");
以上代码的输出 => LambdaTest
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。