Selenio: ¿Puedo establecer el valor del atributo de un WebElement en Selenium?

Tengo un WebElement, quiero restablecer su valor de un atributo a algún otro valor (por ejemplo, attr es el atributo, y quiero cambiar su value=1 original value=1 a nuevo value=10 ).

¿Es posible? Estoy usando Selenium 2.0 (WebDriver).

Deberías usar la clase JavascriptExecutor:

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

Si está usando el patrón PageFactory o ya tiene una referencia a su WebElement , entonces probablemente quiera establecer el atributo, usando su referencia existente al WebElement . (En lugar de hacer un document.getElementById(...) en su javascript)

El siguiente ejemplo le permite establecer el atributo, utilizando su referencia WebElement existente.

Fragmento de código

 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étodo de extensión Fancy C # basado en respuestas anteriores:

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

Uso:

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

Otro para responder a esta pregunta disponible aquí respondió por @nilesh https://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); } 

esto toma ventaja de la función selenium findElementBy donde también se puede usar xpath.

  JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("document.getElementsByClassName('featured-heading')[0].setAttribute('style', 'background-color: green')"); 

Podría agregar un atributo usando el código anterior en java