我有一个元素,它是剑道数字文本框。它也有值,我可以通过使用此代码片段driver.findElement(By.xpath("xpathlocator_value")).getAttribute("value");
获取值,但我想清除该值,我想用另一个值更新此元素。我试过了
使用clear()
和sendkeys(keys.control +"a",keys.delete)
的方式
但它不起作用。
html代码是
<form id="cashbookForm" class="form">
<div class="widget">
<table class="sTable taskWidget" width="100%" cellspacing="0" cellpadding="0">
<thead>
<tbody>
<tr data-bind="css:ExpenseID()==0?'non-printable':'',click:$root.CloseEditable">
<tr data-bind="css:ExpenseID()==0?'non-printable':''">
<td data-bind="text:Order">2</td>
<td>
<td>
<td>
<td>
<td>
<div style="float: right;">
<span class="k-widget k-numerictextbox noform required" style="text-align: right;">
<span class="k-numeric-wrap k-state-default">
<input class="k-formatted-value noform required k-input" type="text" style="text-align: right; display: inline;" tabindex="0" readonly="readonly">
<input class="noform required k-input" type="text" data-bind="kendoNumericTextBox: { value: Ca_TotalAmount, min: 0,format: '#.00'},uniqueName:true" style="text-align: right; display: none;" data-role="numerictextbox" role="spinbutton" tabindex="0" aria-valuemin="0" aria-valuenow="251.44" name="ko_unique_4">
<span class="k-select">
</span>
</span>
</div>
</td>
<td> </td>
<td class="removeOnPrint">
</tr>
<tr class="removeOnPrint">
这里的数字文本框位于
<input class="k-formatted-value noform required k-input" type="text" style="text-align: right; display: inline;" tabindex="0" readonly="readonly">
答案 0 :(得分:0)
您可以使用JavascriptExecutor来实现目标。
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("window.document.getElementById("elementID").setAttribute('value', ' ')");
或
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("window.document.getElementById("elementID").value = ' '");
如果你想使用xPath:
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("document.evaluate('xpath_locator', document, null, 9, null).singleNodeValue.value = ' '");
答案 1 :(得分:0)
这是一个很老的问题,但是我在这里发布答案,以防有人觉得有用。如果您正在使用硒,并且想要删除属性而不是清除它,那么可以使用以下方法:
public static void javascriptRemoveAttribute(WebElement element, WebDriver driver) {
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].removeAttribute('required');", element);
}
它类似于第一个答案,但关键是removeAttribute
。 ExecuteScript基本上需要元素数组。因此,您可以在需要修改时传递元素,然后删除其属性。
答案 2 :(得分:0)
使用此功能,您可以更改元素的值:
public void clearElementValueByJS(WebElement element, WebDriver driver, Stringvalue) {
try {
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].value='" + value + "'", element);
} catch (Exception e) {
e.printStackTrace();
}
}
或者您可以更改元素的内部html值:
public void setInnerHTMLValue(WebElement element, String value) {
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("return arguments[0].innerText ='" + value + "'", element);
}