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

时间:2010-07-14 19:10:07

标签: java selenium-webdriver sendkeys

在WebDriver中,如果我使用sendKeys,它会将我的字符串追加到字段中已存在的值。我无法通过使用clear()方法清除它,因为第二个我这样做,网页将抛出一个错误,说它必须介于10和100之间。所以我无法清除它或者之前会抛出错误我可以使用sendKeys输入新值,如果我sendKeys它只是将它附加到已存在的值。

WebDriver中是否有任何内容可以覆盖字段中的值?

12 个答案:

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

找到元素,单击它,清除它,然后发送密钥。

This page has a complete code sample and article可能会有所帮助。

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