在 WebDriver 中,如果我使用 sendKeys,它会将我的字符串附加到字段中已经存在的值。我无法使用 clear() 方法清除它,因为第二次这样做,网页会抛出一个错误,说它必须在 10 到 100 之间。所以我无法清除它,否则之前会抛出错误我可以使用 sendKeys 输入新值,如果我 sendKeys 它只是将它附加到已经存在的值上。
WebDriver 中是否有任何内容可以让您覆盖该字段中的值?
在 WebDriver 中,如果我使用 sendKeys,它会将我的字符串附加到字段中已经存在的值。我无法使用 clear() 方法清除它,因为第二次这样做,网页会抛出一个错误,说它必须在 10 到 100 之间。所以我无法清除它,否则之前会抛出错误我可以使用 sendKeys 输入新值,如果我 sendKeys 它只是将它附加到已经存在的值上。
WebDriver 中是否有任何内容可以让您覆盖该字段中的值?
您还可以在发送密钥之前清除该字段。
element.clear()
element.sendKeys("Some text here")
我认为您可以尝试首先选择字段中的所有文本,然后发送新序列:
from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
好的,那是几天前......在我目前的情况下,ZloiAdun 的答案对我不起作用,但让我非常接近我的解决方案......
代替:
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
下面的代码让我很高兴:
element.sendKeys(Keys.HOME, Keys.chord(Keys.SHIFT, Keys.END), "55");
所以我希望这对某人有帮助!
这对我有用。
mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
如果它对任何人有帮助,ZloiAdun 的答案的 C# 等价物是:
element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
使用这个,它是值得信赖的解决方案,适用于所有浏览器:
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 清除它。它将尝试通过空路径查找文件并抛出错误。
由于文本字段不接受键盘输入,使用上述大多数方法时出现问题,并且鼠标解决方案似乎不完整。
这用于模拟字段中的点击,选择内容并将其替换为新内容。
Actions actionList = new Actions(driver);
actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
release().build().perform();
使用以下内容:
driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.DELETE), "Your Value");
当我不得不处理带有嵌入式 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);
WebElement p= driver.findElement(By.id("your id name"));
p.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
这很容易做到,它对我有用:
//Create a Javascript executor
JavascriptExecutor jst= (JavascriptExecutor) driver;
jst.executeScript("arguments[1].value = arguments[0]; ", 55, driver.findElement(By.id("id")));
55 = 赋值
原始问题说 clear() 不能使用。这不适用于那种情况。我在这里添加我的工作示例,因为这个 SO 帖子是在输入值之前清除输入的第一个谷歌结果之一。
对于此处没有额外限制的输入,我将使用 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 );
});
},
找到元素,单击它,清除它,然后发送密钥。
这个页面有一个完整的代码示例和文章可能会有所帮助。