通过sendKeys()将字符串发送到ExtJS输入时,第一个字符不断丢失

时间:2016-01-29 14:12:32

标签: selenium extjs selenium-webdriver remotewebdriver

我随机面对ExtJS5输入字段中缺少第一个字符的问题,同时通过sendKeys方法发送字符串。

系统信息: Ubuntu 14.04 - >带有硒网格的码头工人集装箱(2.48.2) 浏览器Firefox

代码很简单。我只是获取输入web元素,等待它是可点击的(即isEnabled和isDisplay),清除并发送字符串:

wait.until(ExpectedConditions.elementToBeClickable(input)).clear();
input.sendKeys(value);

输入元素也很简单:

<input id="textfield-1455-inputEl" data-ref="inputEl" type="text" role="textbox" size="1" name="name" class="x-form-field x-form-required-field x-form-text x-form-text-default x-form-focus x-field-form-focus x-field-default-form-focus" autocomplete="off" componentid="textfield-1455"/>

我注意到只有在页面上执行的第一个sendKeys()才会出现问题:

  • 进入页面,等待页面加载,使用第一个输入
  • 进入页面,等待页面加载,选择启用进入相应的选择框以启用输入字段,使用输入字段(image with this example is attached
  • 进入页面,等待页面加载,单击按钮添加以添加所需的输入字段,使用输入字段

页面上发生的其他sendKeys是稳定的。

我找了类似的问题。它似乎不是特殊字符的问题(缺少字符示例:46-&gt; 6; coverTest - &gt; overTest; 1 - &gt;没有);

此外,由于远程webdriver基础结构,我不认为这是一个缺少字符的问题。测试随机但在确切的位置失败。

我知道我可以使用sendKeys(),然后检查输入的值并重复发送操作。但是,这是最后一个选择。

是否需要对ExtJS输入(DOM中的任何属性)进行额外检查以确保输入字段已准备好?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

有时它发生在我身上。首先尝试点击该字段,但这是一个疯狂的猜测,假设可能存在一些与焦点相关的问题。 您的序列可能有点像这样:

wait.until(ExpectedConditions.elementToBeClickable(input)).click();
input.clear();
input.sendKeys(value);

奇怪的是,我实际上遇到了一种情况,我在发送值之前点击了两次,并以某种方式工作:P

尝试的另一件事可能是使用非原生 javascript执行程序。

JavascriptExecutor myExecutor = ((JavascriptExecutor) driver);
myExecutor.executeScript("arguments[0].value='6';", input);

对不起,如果系统出现在我面前,我会尝试更多的东西。

答案 1 :(得分:0)

我正在努力与sendKeys失败,但以下工作非常一致。方法findVisibleElementdriver.until...的自定义包装器。

protected static boolean sendKeysByChar(By by, String input)
{
        WebElement field = driver.findVisibleElement(by).base();

    field.click();
    field.clear();

    for (int i = 0; i < input.length(); i++) {
        String current = driver.findElement(by).getAttribute("value");
        String nextChar = String.valueOf(input.charAt(i));
        while (current.length() <= i || !current.endsWith(nextChar)) {
            field.sendKeys(nextChar);
            current = driver.findElement(by).getAttribute("value");
        }
    }

    field = driver.findElement(by); // Refresh element
    if (field.getAttribute("value").equals(input)) { return true; }

    log.warn("Send keys by char failed.");
    return false;
}