在selenium类型命令中不会触发onchange事件

时间:2011-01-14 10:13:55

标签: selenium automated-tests selenium-ide

我正在键入一些值,在更改时总计。但不知何故,这个事件并没有被selenium类型命令激活。

我也尝试过typeKey和typeAt ..但没有成功。对此有何解决方法?

8 个答案:

答案 0 :(得分:8)

要触发onchange事件,请尝试在Selenium IDE中添加此命令:

fireEvent targetID blur

答案 1 :(得分:6)

Firefox有bug,可防止在浏览器窗口失焦时执行某些事件。当您运行自动化测试时,这可能是一个问题 - 即使窗口没有聚焦,也可能会打字。

要解决此问题,我“手动”触发了更改事件,将javascript注入我的测试中。:

//suppose "element" is an input field
element.sendKeys("value");
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("$(arguments[0]).change();", element);

您可能已经注意到,我正在使用jQuery来触发更改事件。如果你没有在你的应用上使用jQuery,你可以检查here如何使用vanilla javascript触发它。

希望能帮助某人。

答案 2 :(得分:3)

如果您正在使用Selenium 1.x,则可以使用fireEvent命令在输入值后手动触发onChange事件。也许这会解决你的问题?

答案 3 :(得分:1)

通常可以通过查看JavaScript代码找到您的解决方案..

您始终拥有的选项是输入值并从代码手动触发实际的OnChange事件。

关于此link text有一个未解决的问题 FireFox Windows无法处于活动状态时出现问题,并阻止触发OnChange。

在使用typeKeys命令之前尝试此操作:

selenium.selectWindow(null);

答案 4 :(得分:1)

这在IDE中适用于我 按顺序执行以下3个命令

Typekeys   targetID    input
FireEvent  targetID    focus
Type       targetID    input

源看起来像这样(输入是字母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>

答案 5 :(得分:1)

它看起来像&#34; sendKeys&#34;执行命令是为了纠正这个问题:

https://code.google.com/p/selenium/issues/detail?id=5451

这对我有用。

<tr>
    <td>sendKeys</td>
    <td>id=Quantity</td>
    <td>Type stuff here</td>
</tr>

答案 6 :(得分:0)

我遇到了类似的问题,使用Ajax制作了一个下拉列表。
当用户在字段中键入时,系统会显示带有多个选项的AJAX Composite Layers w,每个选项都作为div的链接

更糟糕的是,在 onChange()上调用了一个填充系统标志的函数,该标志将用作form.submit()上的验证。 (哦,痛苦)

无论如何,我的解决方案:
1 - Selenium sendKeys 命令,以便出现Ajax div

target='#'

2 - 等待带有预期选项的链接出现

<tr>
    <td>sendKeys</td>
    <td>id=txtTipoDocumento</td>
    <td>ipsum lorem</td>
</tr>

3 - selenium clickAt 链接

<tr>
    <td>waitForElementPresent</td>
    <td>link=ipsum lorem</td>
    <td></td>
</tr>


4 - 这是其中一个捕获:手动触发 onChange() blur 事件。此外,浏览器还要关注不同字段

<tr>
    <td>clickAt</td>
    <td>link=ipsum lorem</td>
    <td>10,20</td>
</tr>

5 - 最后,为了确保,我让Selenium在forme的Submit按钮上执行ClickAt()命令,在mouseDown和MouseUp命令之间执行

 <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>


不优雅,但它有效。

答案 7 :(得分:0)

我遇到了同样的问题,但能够解决此问题。下面的代码用于在输入字段中输入文本并触发onchange事件。

background: it.name === "May" ? (parseInt(text) > 50 ? "#08AE4E" : "#f54840") :"#000"

希望它能工作!