在WebDriver中,如果我使用sendKeys,它将把我的字符串附加到字段中已经存在的值上。我无法使用clear()方法清除它,因为第二次我这样做,网页将抛出一个错误,指出它必须介于10到100之间。所以我无法清除它,否则之前将引发错误我可以使用sendKeys来输入新值,如果我使用sendKeys,只需将其附加到已经存在的值上即可。
WebDriver中是否有任何内容可以让您覆盖字段中的值?
Answers:
我认为您可以尝试首先选择字段中的所有文本,然后发送新序列:
from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
Keys
?
Keys.COMMAND
而不是Keys.CONTROL
。
send_keys
但遇到错误AttributeError: type object 'Keys' has no attribute 'chord'
element.send_keys(Keys.CONTROL, 'a')
您还可以在发送密钥之前清除该字段。
element.clear()
element.sendKeys("Some text here")
element.GetAttribute("value")
在调用之前,请确保该值确实有一个值element.clear()
(等待该值不为空)。当使用ngModel指令测试AngularJS输入时,有时会发生这种情况。
好的,这是几天前的事...就我目前而言,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清除它。它将尝试通过空路径查找文件,并会引发错误。
您可以在我的博客上找到更多详细信息
由于textfield不接受键盘输入,并且鼠标解决方案似乎不完整,因此使用大多数上述方法都存在问题。
这用于模拟字段中的单击,选择内容并将其替换为new。
Actions actionList = new Actions(driver);
actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
release().build().perform();
最初的问题是说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 );
});
},
找到元素,单击它,将其清除,然后发送密钥。
此页面上有完整的代码示例和文章,可能会有所帮助。
当我不得不使用嵌入式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);