【发布时间】:2010-11-27 00:37:19
【问题描述】:
我在针对 IE7 运行 selenium RC 测试时收到此错误。
com.thoughtworks.selenium.SeleniumException:错误:出现意外警报! [错误:[对象错误]]
每当我尝试点击链接、标签或任何可点击的东西时都会发生这种情况。任何想法的家伙。这真是令人沮丧。
【问题讨论】:
标签: java eclipse internet-explorer-7 junit selenium
我在针对 IE7 运行 selenium RC 测试时收到此错误。
com.thoughtworks.selenium.SeleniumException:错误:出现意外警报! [错误:[对象错误]]
每当我尝试点击链接、标签或任何可点击的东西时都会发生这种情况。任何想法的家伙。这真是令人沮丧。
【问题讨论】:
标签: java eclipse internet-explorer-7 junit selenium
检查Google search results for your error message 和the selenium development mailing list,听起来好像这不是 Selenium 中的错误,而是 Selenium 告诉您在您的 Web 应用程序中调用了意外的 window.alert() 函数,并且Selenium 不知道如何处理它,因为您没有告诉它如何处理。
【讨论】:
如果在其他浏览器中没有出现同样的问题,我会感到惊讶。也许您的应用程序的行为因浏览器而异?基本上,Selenium 报告说,在您单击这些链接或选项卡后,它无法继续执行其他命令,因为它检测到了意外的 JavaScript 警报。您不会看到这些警报,因为 Selenium 会消耗它们。您可以做一些事情来弄清楚发生了什么。
我建议的第一件事是在 IE7 中检查您的应用程序。手动完成测试步骤 - 你看到 JavaScript 警报了吗?如果是这样,您需要将适当的命令添加到您的 Selenium 测试中。
如果由于某种原因您无法手动复制警报,您可以使用 getAlert 命令关闭警报,或使用 getAlert 的响应来找出意外警报的文本。
用于查找警报消息的 Java/TestNG 示例:
assertEquals(selenium.getAlert(), "Hello World");
上述情况仍会导致您的测试失败(除非警报确实说“Hello World”),但会失败并显示类似于“预期的'Hello World'但是'您的意外警报消息'”的消息。
【讨论】:
我得到了类似的东西。
IE 中没有错误,Chrome 中的 JS 错误弹出窗口,FF 中没有任何内容......直到我运行我的 Selenium 脚本并报告意外错误。
有趣的是,当我执行 selenium.IsAlertPresent() 时它返回 false,即使它说有一个。
【讨论】:
我看到了同样的错误。通常我们使用 C# 运行测试,但在这种情况下,我们使用 Selenium IDE 设置一些简单的测试。
由于 Selenium IDE 会记录您的事件,然后允许您回放它们,因此您希望它能够处理警报。当查看它记录的事件时,它似乎正在捕获警报。但是,当您播放它时,事件是乱序的。
首先它捕获点击事件。然后是使用 assertAlert 来确保警报发生。
播放时会出现问题。它执行点击事件,然后出错。如果在 click 事件之前移动 assertAlert 语句,它将不起作用。如果您将 assertAlert 更改为 waitForAlert 也不起作用。我似乎无法弄清楚如何在 Selenium IDE 中播放。如果我不需要这个可运行的非技术人员,我只需将它放入我的常规测试并完成它。
编辑:经过进一步审查,警报消息似乎不匹配。即使它在记录时抓住了警报本身。目视检查无法帮助我确定它认为不同的地方。
【讨论】:
storeAlert(dummy_variable) before click() 似乎最适合我。
我也看到了这个错误。就我而言,问题是 Ajax 响应对象中的延迟导致 Selenium IDE 错误。对我有用的解决方案是在测试脚本中的任何 Ajax 调用之后添加一个暂停命令。
下面的调用需要几秒钟才能返回有效的 Ajax 响应 点击 css=#form3 > div.addButton > button.btn.btn-primary
通过添加暂停子句,“意外警报”问题得到解决 暂停 5000
【讨论】:
我建议您手动测试硒测试中的那些步骤。如果它不可重现,那么它可能不是页面中的问题。 请使用 assert 函数调试您的 selenium 脚本,以确定它在哪里找到意外警报。
if (selenium.isAlertPresent()) {
assertEquals(selenium.getAlert(), "Hello World");
}
这将帮助您识别问题。我建议您重复测试,因为您可能会发现该断言出现在代码的不同部分。
【讨论】: