it-swarm.com.de

Verwenden des Selenium Web Driver zum Abrufen des Werts einer HTML-Eingabe

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.

86
jamesfzhang

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 #.

162
prestomanifesto

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.

20
Praveen

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

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

5
Vfleitao

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.

4
raggzy

Für Python-Bindungen gilt:

element.get_attribute('value')
2
Sajid Manzoor

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