我有一个WebElement,我想将其属性的值重置为其他值(例如attr
是属性,我想将其原始value=1
更改为新value=10
})。
有可能吗?我正在使用Selenium 2.0(WebDriver。)
答案 0 :(得分:41)
您必须使用JavascriptExecutor类:
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");
答案 1 :(得分:15)
如果您使用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);
}
}
答案 2 :(得分:10)
基于先前答案的Fancy 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");
答案 3 :(得分:0)
我创建了这个可以解决问题的jquery。
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" +
"});");
}
使用此脚本,您可以将实际的类名更改为其他名称。
答案 4 :(得分:0)
我针对相同的问题发布了类似的解决方案,
访问How to use javascript to set attribute of selected web element using selenium Webdriver using java?
在这里,我们首先找到了使用xpath的元素,然后遍历了元素列表,然后将驱动程序对象强制转换为Executor对象,并在此处创建脚本,第一个参数是元素和第二个参数是属性,第三个参数是新值
List<WebElement> unselectableDiv = driver
.findElements(By.xpath("//div[@class='x-grid3-cell-inner x-grid3-col-6']"));
for (WebElement element : unselectableDiv) {
// System.out.println( "**** Checking the size of div "+unselectableDiv.size());
JavascriptExecutor js = (JavascriptExecutor) driver;
String scriptSetAttr = "arguments[0].setAttribute(arguments[1],arguments[2])";
js.executeScript(scriptSetAttr, element, "unselectable", "off");
System.out.println(" ***** check value of Div property " + element.getAttribute("unselectable"));
}
答案 5 :(得分:-1)
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementsByClassName('featured-heading')[0].setAttribute('style', 'background-color: green')");
我可以在java
中使用上面的代码添加一个属性