我想使用javascript为网页上的所选元素设置属性。
我找到了两种使用javascript设置属性的方法
1
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementByID('//id of element').setAttribute('attr', '10')");
2
WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
但我想将javascript应用于我使用selenium webdriver
找到的特定webelement作为示例,我使用selenium webdriver选择一个链接
driver.findElement(By.linkText("Click ME"))
现在我想使用javascript
设置此webelement的属性但我不知道如何将两者结合起来
请帮我找到解决方案
答案 0 :(得分:28)
遵循:
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element = driver.findElement(By.linkText("Click ME"));
js.executeScript("arguments[0].setAttribute('attr', '10')",element);
答案 1 :(得分:1)
我也遇到了类似的问题,并且使用了javascript Executor
因此,在我的情况下,我有一个必须更改其属性的元素列表
在这里我首先找到元素,然后遍历列表,创建javascriptExecutor对象,然后在该特定元素上执行脚本
//arguments[0] means the element
//arguments[1] means the property
//arguments[2] means the new value of the propert
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"));
}
答案 2 :(得分:0)
根据您的代码试用:
driver.findElement(By.linkText("Click ME"))
innerHTML
似乎设置为点击我。
因此,要设置一个新值,例如以10
作为innerHTML
,您可以使用executeScript()
界面的JavascriptExecutor方法,并且可以使用以下解决方案:
使用 innerHTML :
WebDriver driver;
WebElement element = driver.findElement(By.linkText("Click ME"));
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].setAttribute('innerHTML', '10')", element);
理想情况下,您需要为elementToBeClickable()
引入WebDriverWait,并且可以使用以下解决方案:
使用 textContent :
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Click ME")))
((JavascriptExecutor) driver).executeScript("arguments[0].setAttribute('textContent','10')", element);
您可以在以下位置找到相关的详细讨论: