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.
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.
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.
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");
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
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.
Pour les liaisons en python, ce sera:
element.get_attribute('value')
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);
}