60 votes

Selenium : puis-je définir n'importe quelle valeur d'attribut d'un WebElement dans Selenium ?

J'ai un WebElement, je veux réinitialiser sa valeur d'attribut à une autre valeur (par exemple, attr est l'attribut, et je veux changer son value=1 d'origine en nouveau value=10 ).

Est-il possible? J'utilise Selenium 2.0 (WebDriver.)

60voto

CBRRacer Points 2463

Vous devrez utiliser la classe JavascriptExecutor :

 WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");

14voto

Vitaliy Ulantikov Points 2834

Méthode d'extension fantaisie C# basée sur les réponses précédentes :

 public static IWebElement SetAttribute(this IWebElement element, string name, string value)
{
    var driver = ((IWrapsDriver)element).WrappedDriver;
    var jsExecutor = (IJavaScriptExecutor)driver;
    jsExecutor.ExecuteScript("arguments[0].setAttribute(arguments[1], arguments[2]);", element, name, value);

    return element;
}

Usage:

 driver.FindElement(By.Id("some_option")).SetAttribute("selected", "selected");

7voto

Anudeep Samaiya Points 48

Un autre pour répondre à cette question disponible ici répondu par @nilesh https://stackoverflow.com/a/19934852/2079692

 public void setAttributeValue(WebElement elem, String value){
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])",
        elem, "value", value
    );
}

cela tire parti de la fonction findElementBy de sélénium où xpath peut également être utilisé.

0voto

Darío Spasaro Points 1

J'ai créé cette jquery qui a résolu mon problème.

 public void ChangeClassIntoSelected(String name,String div) {
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("Array.from($(\"div." + div +" ul[name=" + name + "]\")[0].children).forEach((element, index) => {\n" +
                "   $(element).addClass('ui-selected');\n" +
                "});");
    }

Avec ce script, vous pouvez changer le nom de la classe réelle en quelque chose d'autre.

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