Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
selenium type命令未触发onchange事件_Selenium_Automated Tests_Selenium Ide - Fatal编程技术网

selenium type命令未触发onchange事件

selenium type命令未触发onchange事件,selenium,automated-tests,selenium-ide,Selenium,Automated Tests,Selenium Ide,我输入了一些值,对更改做了总计。但不知何故,这个事件并不是通过selenium类型的命令触发的 我也试过typeKey和typeAt,但没有成功。对此有什么解决办法吗?您的解决方案通常是通过查看JavaScript代码找到的 您始终可以选择输入值,并从代码手动触发实际的OnChange事件 这是一个悬而未决的问题 FireFox窗口未处于活动状态时出现问题,导致无法触发OnChange 在使用typeKeys命令之前,请尝试以下操作: selenium.selectWindow(null);

我输入了一些值,对更改做了总计。但不知何故,这个事件并不是通过selenium类型的命令触发的


我也试过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));