我有一个WebElement,我想将其属性的值重置为其他值(例如attr属性,我想将其原始值更改value=1为new value=10).
可能吗?我正在使用Selenium 2.0(WebDriver.)
CBR*_*cer 48
您必须使用JavascriptExecutor类:
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");
Run Code Online (Sandbox Code Playgroud)
Nic*_*aly 17
如果您正在使用PageFactory模式或已经具有对WebElement的引用,那么您可能希望使用对WebElement的现有引用来设置该属性.(而不是document.getElementById(...)在你的JavaScript中做)
以下示例允许您使用现有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);
}
}
Run Code Online (Sandbox Code Playgroud)
Vit*_*kov 10
基于以前答案的花式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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
driver.FindElement(By.Id("some_option")).SetAttribute("selected", "selected");
Run Code Online (Sandbox Code Playgroud)
另一个回答这个问题的人可以在这里回答@nilesh /sf/answers/1395439671/
public void setAttributeValue(WebElement elem, String value){
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])",
elem, "value", value
);
}
Run Code Online (Sandbox Code Playgroud)
这利用了 selenium findElementBy 函数,其中也可以使用 xpath。