Im HTML einer webapp gibt es folgenden Code
<input type="text" name="prettyTime" id="prettyTime" class="ui-state-disabled prettyTime" readonly="readonly">
Was auf der Seite tatsächlich angezeigt wird, ist eine Zeichenfolge, die die Uhrzeit anzeigt.
In Selenium Web Driver habe ich ein WebElement
-Objekt, das auf den <input>
using verweist
WebElement timeStamp = waitForElement(By.id("prettyTime"));
Ich möchte den Wert von WebElement
erhalten, oder anders ausgedrückt, was auf der Seite gedruckt wird. Ich habe alle WebElement
-Getter ausprobiert und nichts hat den tatsächlichen Wert abgerufen, den der Benutzer sieht. Irgendeine Hilfe? Vielen Dank.
element.getAttribute("value")
ausprobieren
Die text
-Eigenschaft ist für Text innerhalb der Tags eines Elements. Bei Eingabeelementen wird der angezeigte Text nicht vom <input>
-Tag umschlossen, sondern im Attribut value
.
Hinweis: Der Fall ist wichtig. Wenn Sie "Wert" angeben, erhalten Sie einen "Nullwert" zurück. Dies gilt zumindest für C #.
Das kannst du so machen:
webelement time=driver.findElement(By.id("input_name")).getAttribute("value");
dies gibt Ihnen die Zeit, die auf der Webseite angezeigt wird.
Mit Selen 2
ich schreibe es normalerweise so:
WebElement element = driver.findElement(By.id("input_name"));
String elementval = element.getAttribute("value");
OR
String elementval = driver.findElement(By.id("input_name")).getAttribute("value");
Nach der Antwort von @ragzzy verwende ich
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;
}
}
Es funktioniert ziemlich gut und ändert das DOM nicht
Wie schon erwähnt, könnte man so etwas tun
public String getVal(WebElement webElement) {
JavascriptExecutor e = (JavascriptExecutor) driver;
return (String) e.executeScript(String.format("return $('#%s').val();", webElement.getAttribute("id")));
}
Wie Sie jedoch sehen können, muss Ihr Element ein id
-Attribut und auch eine Jquery auf Ihrer Seite haben.
Für Python-Bindungen gilt:
element.get_attribute('value')
Wenn der Eingabewert von einem Skript aufgefüllt wird, das eine gewisse Latenzzeit aufweist (z. B. AJAX), müssen Sie warten, bis die Eingabe gefüllt ist.
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);
}