我随机面对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()才会出现问题:
页面上发生的其他sendKeys是稳定的。
我找了类似的问题。它似乎不是特殊字符的问题(缺少字符示例:46-&gt; 6; coverTest - &gt; overTest; 1 - &gt;没有);
此外,由于远程webdriver基础结构,我不认为这是一个缺少字符的问题。测试随机但在确切的位置失败。
我知道我可以使用sendKeys(),然后检查输入的值并重复发送操作。但是,这是最后一个选择。
是否需要对ExtJS输入(DOM中的任何属性)进行额外检查以确保输入字段已准备好?
感谢您的帮助。
答案 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失败,但以下工作非常一致。方法findVisibleElement
是driver.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;
}