150 votes

Utiliser Selenium WebDriver pour récupérer la valeur d'une entrée HTML

Le code suivant figure dans le code HTML d'une application web :

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

Une chaîne de caractères affichant l'heure est effectivement affichée sur la page.

Dans Selenium WebDriver, j'ai un fichier WebElement se référant à l'objet <input> en utilisant :

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

Je souhaite obtenir la valeur de l'élément WebElement ou, en d'autres termes, ce qui est imprimé sur la page. J'ai essayé tous les WebElement et rien n'a été fait pour récupérer la valeur réelle que l'utilisateur voit.

5voto

Vfleitao Points 30

Suivant Réponse de ragzzy J'utilise

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

Il fonctionne très bien et n'altère pas la DOM .

3voto

Rajesh Points 11

Utilisation

element.GetAttribute("value");

Même si vous ne voyez pas l'attribut "value" dans le DOM HTML, vous obtiendrez la valeur du champ affichée dans l'interface graphique.

1voto

saille Points 3585

Si la valeur d'entrée est remplie par un script qui implique un certain temps de latence (par exemple, un appel AJAX), vous devez attendre que la valeur d'entrée soit remplie. Par exemple

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

0voto

Utilisateurs de Java :

Pour obtenir ce qui est imprimé sur la page, nous devons utiliser la méthode getText().

Méthode getText()

La méthode getText() renvoie le texte intérieur visible d'un élément web.

Méthode getAttribute()

En revanche, la méthode getAttribute() récupère la valeur de l'attribut que l'on souhaite récupérer.

Ejemplo:

<input name="Title" type="text" value="LambdaTest" /> Welcome to LambdaTest </input>

getText()

driver.findElement(By.name("Title")).getText();

Sortie du code ci-dessus => Bienvenue à LambdaTest

getAttribute():

  1. driver.findElement(By.name("Title")).getAttribute("value");

    Sortie du code ci-dessus => LambdaTest

  2. driver.findElement(By.name("Title")).getAttribute("type");

    Résultat du code ci-dessus => texte

Source : Différence entre getText() et getAttribute() dans Selenium WebDriver

-3voto

JZ11 Points 859

C'est une méthode un peu bricolée, mais qui fonctionne.

J'ai utilisé JavascriptExecutor et a ajouté un div à l'HTML, et a modifié le texte dans la section div a $('#prettyTime').val()

J'ai ensuite utilisé Selenium pour récupérer le fichier div et d'en saisir la valeur. Après avoir testé l'exactitude de la valeur, j'ai supprimé la div qui venait d'être créée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X