我们的团队一直在使用 Selenium 测试我们的应用程序,因为它主要由 JavaScript 驱动,我们总是遇到测试偶尔失败的问题。随着测试数量的增加,在一次完整运行中至少有两个测试失败的可能性已成为确定性。
我们最近发现,我们可能有一个竞争条件,即 selenium 会在初始化 JavaScript 有机会将事件处理程序附加到被单击的元素之前单击链接。当然,此时我们正在寻找的效果并没有发生,我们得到了一个失败的测试。
目前我们在点击之前添加了一个轻微的延迟,让初始化 JavaScript 代码有时间完成,这显然有点 hackish,增加了整体测试执行的时间,并且不能保证测试仍然不会失败,所以我们正在寻找更好的解决方案。
到目前为止,我们提出的最佳想法是将一个隐藏元素注入(inject)到 Selenium 可以等待的 DOM 中,然后再触发点击事件以了解它已准备就绪。当我们处理异步事件、删除和添加元素时,这将在开发人员时间方面产生大量额外开销。它还向我们的页面添加了应用程序真正不需要的额外内容。
有没有人有更好的策略?你做了什么来有效地解决这个问题?
最佳答案
我们迁移到 Selenium 2 (WebDriver) 并使用 Page Objects pattern使用 PageFactory/AjaxElementLocatorFactory - 一个例子是 here
关于ajax - 您如何使用 Selenium 测试 Ajax 应用程序并使其保持稳定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3513529/