Selenium 2.0rc3 点击功能太快?
首先,抱歉这个问题有点难懂。
我所在的团队目前正在使用Selenium 2.0rc3(配合Python)来测试我们的网页应用,使用的是Chrome浏览器。当我们用Selenium的2.02b版本时,测试是通过的(虽然速度有点慢,我们还对webdriver做了一些小改动)。但是升级后,测试变得非常快,却开始失败。经过调试,我们发现大多数测试失败是因为webdriver的click()函数没有阻止后续调用。现在我们在每次点击后加了0.5秒的sleep()/timeout,这虽然解决了眼前的问题,但并没有达到我们的主要目标(也就是加快测试速度)。
3 个回答
如果你在点击的时候会执行一些ajax请求,我建议你使用NicelyResynchronizingAjaxController这个工具。
我试过用selenium-2 rc3的Python库来控制Chrome浏览器。我的体验和你说的正好相反——点击后,驱动程序不知道页面已经准备好了,所以它不能继续执行。这导致测试变得非常慢,因为驱动程序一直在等待。不过,Firefox的驱动程序看起来比较稳定,也许你可以先继续用它,等Chrome的驱动程序再成熟一些再换。
你的问题其实不是点击得太快,而是点击的时候那个元素还没出现。解决这个问题有两种方法:
- 等到元素出现后再点击
- 增加隐式等待时间
我没用过WebDriver的Python版本,不过我可以告诉你在Java中是怎么做的,希望你能找到Python的对应方法。
在Java中,我们有一个叫做 WebDriverWait
的类,可以用来等待一个元素出现。你需要写一个 Function
,然后把它传给 until()
方法,这个方法只有在元素存在时才会返回成功。你可以用 driver.findElements( By... )
来实现,或者把 driver.findElement( By... )
放在一个异常处理器里。这个 Function
会一直检查,直到它返回真或者超时。
第二种方法是你这个情况的推荐做法,在Java中可以用 driver.manage().timeouts().implicitlyWait( ... )
来设置。