J'ai un WebElement, je veux réinitialiser la valeur d'un attribut à une autre valeur (par exemple, attr
est l'attribut, et je veux changer son value=1
Original en un nouveau value=10
).
C'est possible? J'utilise Selenium 2.0 (WebDriver.)
Vous devez utiliser la classe JavascriptExecutor:
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");
Si vous utilisez le modèle PageFactory ou avez déjà une référence à votre WebElement , vous souhaiterez probablement définir l'attribut, en utilisant votre référence existante à WebElement . (Plutôt que de faire une document.getElementById(...)
dans votre javascript)
L'exemple suivant vous permet de définir l'attribut à l'aide de votre référence WebElement existante.
Extrait de code
import org.openqa.Selenium.WebElement;
import org.openqa.Selenium.remote.RemoteWebDriver;
import org.openqa.Selenium.support.FindBy;
public class QuickTest {
RemoteWebDriver driver;
@FindBy(id = "foo")
private WebElement username;
public void exampleUsage(RemoteWebDriver driver) {
setAttribute(username, "attr", "10");
setAttribute(username, "value", "bar");
}
public void setAttribute(WebElement element, String attName, String attValue) {
driver.executeScript("arguments[0].setAttribute(arguments[1], arguments[2]);",
element, attName, attValue);
}
}
Méthode d'extension C # fantaisie 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");
Un autre pour répondre à cette question disponible ici a répondu par @ nileshhttps://stackoverflow.com/a/19934852/2079692
public void setAttributeValue(WebElement elem, String value){
js = (JavascriptExecutor) webDriver;
String scriptSetAttrValue = "arguments[0].setAttribute(arguments[1],arguments[2])";
js.executeScript(scriptSetAttrValue, elem, "value", value);
}
cela tire parti de la fonction Selenium findElementBy où xpath peut également être utilisé.
J'ai créé ce 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.