使用Selenium Web Driver检索HTMLinput的值

在一个web应用程序的HTML中有以下代码

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

实际显示在页面上的是显示时间的string。

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

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

我想获得WebElement的价值,换句话说,就是打印在页面上的内容。 我尝试了所有的WebElement getter,并没有任何检索用户看到的实际值。 任何帮助? 谢谢。

尝试element.getAttribute("value")

text属性是元素标签内的文本。 对于input元素,显示的文本不会被<input>标签包装,而是在value属性中。

注:案件​​事宜。 如果指定“Value”,则会返回“null”值。 至less在C#中是这样。

你可以这样做:

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

这会给你显示在网页上的时间。

用selenium2,

我通常这样写:

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

但是,正如你所看到的,你的元素必须有一个id属性,以及你的页面上的jQuery。

这是一种哈克,但它的作品。

我使用JavascriptExecutor并添加了一个div到HTML中,并将div的文本更改为$('#prettyTime').val()然后我使用Selenium检索div并获取其值。 在testing值的正确性后,我删除了刚创build的div。

如果input值被涉及一些延迟的脚本填充(例如,AJAX调用),那么您需要等待input已经填充。 例如

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