在WebDriver中,如果我使用sendKeys,它会将我的字符串追加到字段中已存在的值。我无法通过使用clear()方法清除它,因为第二个我这样做,网页将抛出一个错误,说它必须介于10和100之间。所以我无法清除它或者之前会抛出错误我可以使用sendKeys输入新值,如果我sendKeys它只是将它附加到已存在的值。
WebDriver中是否有任何内容可以覆盖字段中的值?
答案 0 :(得分:98)
您也可以在发送密钥之前清除该字段。
element.clear()
element.sendKeys("Some text here")
答案 1 :(得分:75)
我认为您可以尝试首先选择字段中的所有文本,然后发送新序列:
from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
答案 2 :(得分:18)
好的,几天前...... 在我目前的情况下,ZloiAdun的答案对我不起作用,但让我非常接近我的解决方案......
而不是:
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
以下代码让我感到高兴:
element.sendKeys(Keys.HOME, Keys.chord(Keys.SHIFT, Keys.END), "55");
所以我希望能帮助别人!
答案 3 :(得分:7)
这对我有用。
mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
答案 4 :(得分:4)
如果它对任何人都有帮助,那么ZloiAdun答案的C#相当于:
element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
答案 5 :(得分:1)
使用这个,它是值得信赖的解决方案,适用于所有浏览器:
protected void clearInput(WebElement webElement) {
// isIE() - just checks is it IE or not - use your own implementation
if (isIE() && "file".equals(webElement.getAttribute("type"))) {
// workaround
// if IE and input's type is file - do not try to clear it.
// If you send:
// - empty string - it will find file by empty path
// - backspace char - it will process like a non-visible char
// In both cases it will throw a bug.
//
// Just replace it with new value when it is need to.
} else {
// if you have no StringUtils in project, check value still empty yet
while (!StringUtils.isEmpty(webElement.getAttribute("value"))) {
// "\u0008" - is backspace char
webElement.sendKeys("\u0008");
}
}
}
如果输入有type =“file” - 请不要为IE清除它。它会尝试通过空路径查找文件并抛出错误。
您可以找到更多详细信息on my blog
答案 6 :(得分:1)
使用以下内容:
driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.DELETE), "Your Value");
答案 7 :(得分:0)
当我不得不处理带有嵌入式JavaScript的HTML页面时,这解决了我的问题
WebElement empSalary = driver.findElement(By.xpath(PayComponentAmount));
Actions mouse2 = new Actions(driver);
mouse2.clickAndHold(empSalary).sendKeys(Keys.chord(Keys.CONTROL, "a"), "1234").build().perform();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].onchange()", empSalary);
答案 8 :(得分:0)
由于文本字段未接受键盘输入,因此使用大多数提到的方法存在问题,并且鼠标解决方案似乎不完整。
这适用于模拟字段中的点击,选择内容并将其替换为新内容。
Actions actionList = new Actions(driver);
actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
release().build().perform();
答案 9 :(得分:0)
原始问题说明不能使用clear()。这不适用于那种情况。我在这里添加了我的工作示例,因为此SO帖子是在输入值之前清除输入的第一个Google结果之一。
对于输入,这里没有额外的限制,我包括使用NodeJS的Selenium的浏览器不可知方法。此代码段是我在测试脚本中使用var test = require( 'common' );
导入的公共库的一部分。它适用于标准节点module.exports定义。
when_id_exists_type : function( id, value ) {
driver.wait( webdriver.until.elementLocated( webdriver.By.id( id ) ) , 3000 )
.then( function() {
var el = driver.findElement( webdriver.By.id( id ) );
el.click();
el.clear();
el.sendKeys( value );
});
},
找到元素,单击它,清除它,然后发送密钥。
答案 10 :(得分:0)
这很容易做到,并且对我有用:
//Create a Javascript executor
JavascriptExecutor jst= (JavascriptExecutor) driver;
jst.executeScript("arguments[1].value = arguments[0]; ", 55, driver.findElement(By.id("id")));
55 =分配值
答案 11 :(得分:0)
WebElement p= driver.findElement(By.id("your id name"));
p.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");