如何使用selenium webdriver清除元素的属性值

时间:2013-11-19 14:46:47

标签: selenium kendo-ui selenium-webdriver numeric-textbox

我有一个元素,它是剑道数字文本框。它也有值,我可以通过使用此代码片段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">

3 个答案:

答案 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);
}