如何使用 javascript 使用 selenium Webdriver 使用 java 设置所选 Web 元素的属性?
Posted
技术标签:
【中文标题】如何使用 javascript 使用 selenium Webdriver 使用 java 设置所选 Web 元素的属性?【英文标题】:How to use javascript to set attribute of selected web element using selenium Webdriver using java? 【发布时间】:2013-11-24 22:16:33 【问题描述】:我想使用 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 设置这个 web 元素的属性
但我不知道如何将两者结合起来
请帮我找到解决办法
【问题讨论】:
【参考方案1】:大致如下:
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element = driver.findElement(By.linkText("Click ME"));
js.executeScript("arguments[0].setAttribute('attr', '10')",element);
【讨论】:
【参考方案2】:我也遇到过类似的问题,我使用了 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"));
【讨论】:
【参考方案3】:根据您的代码试验:
driver.findElement(By.linkText("Click ME"))
innerHTML
似乎设置为 Click ME。
所以,设置一个新值,例如10
作为innerHTML
可以使用JavascriptExecutor接口的executeScript()
方法,可以使用如下解决方案:
使用innerHTML:
WebDriver driver;
WebElement element = driver.findElement(By.linkText("Click ME"));
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].setAttribute('innerHTML', '10')", element);
理想情况下,您需要将WebDriverWait 诱导为elementToBeClickable()
,并且您可以使用以下解决方案:
使用文本内容:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Click ME")))
((JavascriptExecutor) driver).executeScript("arguments[0].setAttribute('textContent','10')", element);
参考
您可以在以下位置找到相关的详细讨论:
Selenium Datepicker using JavascriptExecutor【讨论】:
以上是关于如何使用 javascript 使用 selenium Webdriver 使用 java 设置所选 Web 元素的属性?的主要内容,如果未能解决你的问题,请参考以下文章
如果'checked'属性不可用于使用isChecked / isSelected,如何使用selenium检查复选框的状态? [复制]
如何在没有 ChromeDriver.exe 的情况下在 Maven 中使用 selenium-chrome-driver