我正在使用Firefox驱动程序在Selenium 2.0中编写一些自动化测试。该网站使用了许多绑定,例如输入'使用' data-val-method-to-execute'标记触发javascript函数的属性。
我的测试中有大约10%随机失败,因为驱动程序在加载相应的javascript函数之前单击了一个元素 - 所以什么都不会发生。
一个解决方案可能是Thread.Sleep - 问题是:我必须在我的所有测试中实现(非常多)。它们会大大减慢我的测试速度,时间也是一个问题。睡眠1秒的简单下拉并不总是有效(所以我必须增加超时)
答案 0 :(得分:0)
您需要找到让Selenium等到页面准备就绪的方法。没有"一个尺寸适合所有"解决方案。这真的取决于你做了什么。
对于一些复杂的AJAX / JavaScript,我不得不使用phantomjs并添加计算开放/活动网络连接数量的代码。测试会等到数字发生变化(所以我知道已经发送了AJAX请求),然后直到活动连接数回落到0(所以我知道AJAX已经完成)。
或者,尝试向页面添加隐藏的DIV,告诉测试"所有脚本都已完成"。等待DIV出现。这里的问题是确保您的AJAX处理程序创建DIV。
为了避免污染你的代码,使用一个空函数创建DIV,并在运行覆盖函数的测试时在头部插入一个额外的<script>
元素。