Selenium:我可以在Selenium中设置WebElement的任何属性值吗?

我有一个WebElement,我想重置它的一个属性的值为一些其他的值(例如attr是属性,我想改变它的原始value=1到新value=10 )。

可能吗? 我使用Selenium 2.0(WebDriver)。

你将不得不使用JavascriptExecutor类:

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

如果您正在使用PageFactory模式或已经有对WebElement的引用,那么您可能需要使用对WebElement的现有引用来设置该属性。 (而不是在你的JavaScript做一个document.getElementById(...)

以下示例允许您使用现有的WebElement引用来设置该属性。

代码片段

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

另一个回答这个问题在这里回答@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); } 

这利用了selenium的findElementBy函数,也可以使用xpath。

花哨的C#扩展方法基于以前的答案:

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

用法:

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

我可以在java中使用上面的代码添加一个属性