我正在输入一些值,在更改时进行总计。但不知何故,这个事件并没有被 selenium type 命令触发。
我也试过 typeKey 和 typeAt ..但没有成功。有什么解决方法吗?
我正在输入一些值,在更改时进行总计。但不知何故,这个事件并没有被 selenium type 命令触发。
我也试过 typeKey 和 typeAt ..但没有成功。有什么解决方法吗?
要触发 onchange 事件,请尝试在 Selenium IDE 中添加以下命令:
fireEvent targetID blur
Firefox 有一个错误,它会阻止在浏览器窗口失焦时执行某些事件。当您运行自动化测试时,这可能是一个问题 - 即使窗口失焦,它也可能正在输入。
为了解决这个问题,我“手动”触发了更改事件,将 javascript 注入到我的测试中。:
//suppose "element" is an input field
element.sendKeys("value");
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("$(arguments[0]).change();", element);
您可能已经注意到,我使用 jQuery 来触发 change 事件。如果你没有在你的应用程序上使用 jQuery,你可以在这里查看如何使用 vanilla javascript 来触发它。
希望对某人有所帮助。
如果您使用的是 Selenium 1.x,则可以使用 fireEvent 命令在输入值后手动触发 onChange 事件。也许这会解决你的问题?
您的解决方案通常可以通过查看 JavaScript 代码找到。
您始终可以选择输入值并从代码中手动触发实际的 OnChange 事件。
有一个关于此链接文本的 未解决问题 FireFox Windows 未处于活动状态并阻止触发 OnChange。
在使用 typeKeys 命令之前试试这个:
selenium.selectWindow(null);
这在 IDE 中对我有用,按顺序执行以下 3 个命令
Typekeys targetID input
FireEvent targetID focus
Type targetID input
源看起来像这样(输入是 letter r
)
<tr>
<td>typeKeys</td>
<td>//form/input</td>
<td>r</td>
</tr>
<tr>
<td>fireEvent</td>
<td>//form/input</td>
<td>focus</td>
<tr>
<td>fireEvent</td>
<td>//form/input</td>
<td>focus</td>
</tr>
<tr>
<td>type</td>
<td>//form/input</td>
<td>r</td>
</tr>
</tr>
<tr>
<td>type</td>
<td>//form/input</td>
<td>r</td>
</tr>
看起来执行了“sendKeys”命令来纠正这个问题:
https://code.google.com/p/selenium/issues/detail?id=5451
这对我有用。
<tr>
<td>sendKeys</td>
<td>id=Quantity</td>
<td>Type stuff here</td>
</tr>
我有一个类似的问题,使用 Ajax 制作的下拉列表。
当用户在一个字段中输入时,系统会显示div
带有几个选项的 AJAX w,每个选项都作为一个链接target='#'
更糟糕的是,在onChange()上调用了一个函数来填充系统标志,并且该标志将用作 form.submit() 的验证(哦,痛苦)
无论如何,我对此的解决方案:
1 - Selenium sendKeys命令,这样 Ajax div 就会出现
<tr>
<td>sendKeys</td>
<td>id=txtTipoDocumento</td>
<td>ipsum lorem</td>
</tr>
2 - 等待带有预期选项的链接出现
<tr>
<td>waitForElementPresent</td>
<td>link=ipsum lorem</td>
<td></td>
</tr>
3 - selenium点击链接
<tr>
<td>clickAt</td>
<td>link=ipsum lorem</td>
<td>10,20</td>
</tr>
4 - 这是其中一个问题:手动触发onChange()和blur事件。此外,让浏览器将焦点设置在不同的领域
<tr>
<td>fireEvent</td>
<td>id=txtTipoDocumento</td>
<td>blur</td>
</tr>
<tr>
<td>fireEvent</td>
<td>id=selSerie</td>
<td>change()</td>
</tr>
<tr>
<td>fireEvent</td>
<td>id=selSerie</td>
<td>blur</td>
</tr>
<tr>
<td>focus</td>
<td>id=imgDataElaboracao</td>
<td></td>
</tr>
5 - 最后,可以肯定的是,我让 Selenium 在表单的提交按钮上执行 ClickAt() 命令,在 mouseDown 和 MouseUp 命令之间
<tr>
<td>mouseDown</td>
<td>id=btnSalvar</td>
<td></td>
</tr>
<tr>
<td>focus</td>
<td>id=btnSalvar</td>
<td></td>
</tr>
<tr>
<td>clickAt</td>
<td>id=btnSalvar</td>
<td>10,20</td>
</tr>
不优雅,但它有效。
我遇到了同样的问题,但能够解决这个问题。下面的代码用于在输入字段中输入文本并触发 onchange 事件。
WebElement textBox = driver.findElement(By.xpath(xpath));
textBox.sendKeys("Test");
((JavascriptExecutor) driver).executeScript("arguments[0].onchange",
Arrays.asList(textBox));
希望它会奏效!