selenium type命令未触发onchange事件
我输入了一些值,对更改做了总计。但不知何故,这个事件并不是通过selenium类型的命令触发的selenium type命令未触发onchange事件,selenium,automated-tests,selenium-ide,Selenium,Automated Tests,Selenium Ide,我输入了一些值,对更改做了总计。但不知何故,这个事件并不是通过selenium类型的命令触发的 我也试过typeKey和typeAt,但没有成功。对此有什么解决办法吗?您的解决方案通常是通过查看JavaScript代码找到的 您始终可以选择输入值,并从代码手动触发实际的OnChange事件 这是一个悬而未决的问题 FireFox窗口未处于活动状态时出现问题,导致无法触发OnChange 在使用typeKeys命令之前,请尝试以下操作: selenium.selectWindow(null);
我也试过typeKey和typeAt,但没有成功。对此有什么解决办法吗?您的解决方案通常是通过查看JavaScript代码找到的 您始终可以选择输入值,并从代码手动触发实际的OnChange事件 这是一个悬而未决的问题 FireFox窗口未处于活动状态时出现问题,导致无法触发OnChange 在使用typeKeys命令之前,请尝试以下操作:
selenium.selectWindow(null);
如果您使用的是Selenium 1.x,则可以使用fireEvent命令在键入值后手动触发onChange事件。也许这可以解决您的问题?这在IDE中对我很有效 按顺序执行以下3个命令
Typekeys targetID input
FireEvent targetID focus
Type targetID input
源代码如下所示(输入为字母r
)
打字键
//表格/输入
R
火灾事件
//表格/输入
集中
火灾事件
//表格/输入
集中
类型
//表格/输入
R
类型
//表格/输入
R
要触发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触发更改事件。如果您没有在应用程序上使用jQuery,您可以检查如何使用vanilla javascript触发它
希望这对某人有所帮助。似乎执行了“sendKeys”命令来纠正此问题:
这对我有用
<tr>
<td>sendKeys</td>
<td>id=Quantity</td>
<td>Type stuff here</td>
</tr>
发送键
id=数量
在这里打字
我也遇到了类似的问题,用Ajax制作了一个下拉列表。
当用户在字段中键入时,系统将显示带有多个选项的AJAX
div
w,每个选项都作为带有target='#'
更糟糕的是,在onChange()上调用了一个函数,该函数填充了一个系统标志,该标志将用作表单的验证。submit()
(哦,痛)
无论如何,我的解决方案是:1-Selenium sendKeys命令,以便显示Ajax div
<tr>
<td>sendKeys</td>
<td>id=txtTipoDocumento</td>
<td>ipsum lorem</td>
</tr>
发送键
id=txtTipoDocumento
益智
2-等待具有预期选项的链接出现<tr>
<td>waitForElementPresent</td>
<td>link=ipsum lorem</td>
<td></td>
</tr>
侍者
link=同侧视野
3-单击链接<tr>
<td>clickAt</td>
<td>link=ipsum lorem</td>
<td>10,20</td>
</tr>
点击
link=同侧视野
10,20
4-这里是一个捕获:手动触发onChange()和blur事件。此外,将浏览器调焦,将焦点设置在不同的字段上
火灾事件
id=txtTipoDocumento
变得模糊不清
火灾事件
id=selSerie
更改()
火灾事件
id=selSerie
变得模糊不清
集中
id=imgdataelabacao
5-最后,可以肯定的是,我让Selenium在表单的Submit按钮上执行ClickAt()命令,在mouseDown和MouseUp命令之间执行
穆斯敦
id=btnSalvar
集中
id=btnSalvar
点击
id=btnSalvar
10,20
虽然不优雅,但它确实有效。我面临同样的问题,但能够解决这个问题。下面的代码用于在输入字段中输入文本和fire onchange事件
WebElement textBox = driver.findElement(By.xpath(xpath));
textBox.sendKeys("Test");
((JavascriptExecutor) driver).executeScript("arguments[0].onchange",
Arrays.asList(textBox));
希望它能起作用 我正在使用IDE。这就是我所做的。[#正在执行:| getEval | selenium.selectWindow(null)| |]不起作用。错误:selenium.selectWindow不是一个函数我通常只使用selenium RC,我不确定它是否能够解决IDE的一些问题。。你应该用该信息更新你的问题,这应该是公认的答案(IMHO)。这正是我需要的!另外,在我的例子中,它必须与
sendKeys
一起使用,而不是与type
一起使用。非常感谢你的帮助,@trex。
<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>
<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>
WebElement textBox = driver.findElement(By.xpath(xpath));
textBox.sendKeys("Test");
((JavascriptExecutor) driver).executeScript("arguments[0].onchange",
Arrays.asList(textBox));