10

我正在输入一些值,在更改时进行总计。但不知何故,这个事件并没有被 selenium type 命令触发。

我也试过 typeKey 和 typeAt ..但没有成功。有什么解决方法吗?

4

8 回答 8

9

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

fireEvent targetID blur

于 2012-07-18T05:23:58.550 回答
7

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 来触发它。

希望对某人有所帮助。

于 2013-07-26T03:40:51.953 回答
3

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

于 2011-01-15T08:02:21.433 回答
1

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

您始终可以选择输入值并从代码中手动触发实际的 OnChange 事件。

有一个关于此链接文本的 未解决问题 FireFox Windows 未处于活动状态并阻止触发 OnChange。

在使用 typeKeys 命令之前试试这个:

selenium.selectWindow(null);
于 2011-01-14T15:16:57.643 回答
1

这在 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>
于 2012-01-26T15:39:03.960 回答
1

看起来执行了“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>
于 2015-05-05T17:44:01.750 回答
0

我有一个类似的问题,使用 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>


不优雅,但它有效。

于 2016-07-08T21:01:16.150 回答
0

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

WebElement textBox = driver.findElement(By.xpath(xpath));
textBox.sendKeys("Test");
((JavascriptExecutor) driver).executeScript("arguments[0].onchange", 
  Arrays.asList(textBox));

希望它会奏效!

于 2019-11-29T07:54:03.400 回答