web-dev-qa-db-fra.com

Utilisation du pilote Web Selenium pour récupérer la valeur d’une entrée HTML

Dans le code HTML d'une application Web, il y a le code suivant

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

Ce qui est réellement affiché sur la page est une chaîne affichant l'heure.

Dans Selenium Web Driver, j’ai un objet WebElement faisant référence à <input> en utilisant

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

Je souhaite obtenir la valeur de la variable WebElement ou, en d'autres termes, ce qui est imprimé sur la page. J'ai essayé tous les getters WebElement et rien n'a été récupéré de la valeur réelle que l'utilisateur voit. De l'aide? Merci.

86
jamesfzhang

Essayez element.getAttribute("value")

La propriété text concerne le texte contenu dans les balises d'un élément. Pour les éléments d'entrée, le texte affiché n'est pas entouré par la balise <input>, mais à l'intérieur de l'attribut value.

Remarque: l'affaire est importante. Si vous spécifiez "Valeur", vous obtiendrez une valeur 'null'. Ceci est vrai pour C # au moins.

162
prestomanifesto

Vous pouvez faire comme ça:

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

cela vous donnera l'heure affichée sur la page Web.

20
Praveen

Avec le sélénium 2, 

je l'écris habituellement comme ça:

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

J'utilise la réponse de @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;
        }
    }

Cela fonctionne assez bien et ne modifie pas le DOM

5
Vfleitao

Comme mentionné précédemment, vous pouvez faire quelque chose comme ça

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

Mais comme vous pouvez le constater, votre élément doit avoir un attribut id, ainsi que jquery sur votre page.

4
raggzy

Pour les liaisons en python, ce sera:

element.get_attribute('value')
2
Sajid Manzoor

Si la valeur d'entrée est renseignée par un script impliquant une certaine latence (par exemple, un appel AJAX), vous devez attendre que l'entrée ait été renseignée.

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