Selenium WebDriver:我想覆盖字段中的值,而不是使用Java将其附加到sendKeys

在WebDriver中,如果使用sendKeys,它会将我的string附加到字段中已经存在的值。 我无法使用clear()方法清除它,因为第二个我这样做,网页会抛出一个错误,说它必须在10到100之间。所以我不能清除它,否则会抛出一个错误我可以使用sendKeys放入新的值,如果我发送键,它只是附加到已经存在的值。

WebDriver中有什么可以让你覆盖该字段的值?

我认为你可以尝试先select字段中的所有文本,然后发送新的序列:

from selenium.webdriver.common.keys import Keys element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55"); 

发送密钥之前,您也可以清除该字段。

 element.clear() element.sendKeys("Some text here") 

好吧,这是几天前的一个观点…在我目前的情况下,ZloiAdun的答案不适合我,但带给我非常接近我的解决scheme…

代替:

 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"); 

使用这个,它是值得信赖的解决scheme,适用于所有浏览器:

 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"); } } } 

如果input有types=“文件” – 不要清除IE浏览器。 它会尝试find空path文件,并会抛出一个错误。

更多细节你可以在我的博客上find

这解决了我的问题,当我不得不处理与embedded式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); 

有问题使用大多数提到的方法,因为textfield没有接受键盘input,鼠标解决scheme似乎不完整。

这有助于模拟现场的点击,select内容并用新的replace。

  Actions actionList = new Actions(driver); actionList.clickAndHold(WebElement).sendKeys(newTextFieldString). release().build().perform(); 

原来的问题说clear()不能用。 这不适用于这种情况。 我在这里添加我的工作示例,因为这个SOpost是Google在input值之前首先清除input的首个结果之一。

对于没有额外限制的input,我使用NodeJS为Selenium添加了浏览器不可知的方法。 这段代码是我用var test = require('common')导入的一个公共库的一部分; 在我的testing脚本。 它是一个标准的节点模块。

  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 ); }); }, 

find元素,点击它,清除它,然后发送密钥。

此页面有一个完整的代码示例和文章 ,可能会有所帮助。