首先,抱歉这个神秘的问题。
我的团队目前正在使用Selenium 2.0rc3(使用python)来测试我们的Chrome应用程序。当我们使用2.02b版本的Selenium时,我们的测试通过了(它有点慢,我们加入了webdriver的小黑客)。升级后,测试变得非常快,并开始失败。调试后我们发现大多数测试失败,因为webdrivers click()函数没有阻塞()连续调用。目前我们在每次点击后添加了0.5秒的sleep()/超时,虽然这解决了当前的问题,但它并没有完全实现我们的主要目标(这是为了加快我们的测试)
答案 0 :(得分:5)
你的问题并不是因为点击太快了。只是它在该元素出现之前点击。有两种方法可以解决这个问题:
我担心我没有使用过WebDriver Python绑定。但是,我可以告诉你它是如何用Java完成的,希望你能自己找到Python等价物。
要等待一个元素,我们在Java中有一个名为WebDriverWait
的类。您将编写一个Function
,并将其传递给until()
方法,该方法仅在元素存在时才会传递。您可以使用driver.findElements( By... )
或在异常处理程序中包装driver.findElement( By... )
的方法之一。轮询Function
直到它返回true或指定的超时被命中。
第二种方法是您的案例的首选方法,在Java中,您可以driver.manage().timeouts().implicitlyWait( ... )
。
答案 1 :(得分:1)
我已经尝试了用于铬的selenium-2 rc3 python绑定。我的经历与您所描述的相反 - 点击后,驱动程序不知道页面已准备好继续。因此,他们没有加快测试速度,反而非常缓慢(因为司机等待了很长时间)。然而,firefox驱动程序似乎相当稳定 - 也许你应该坚持使用它,直到chrome驱动程序被烘烤了一点。
答案 2 :(得分:0)
如果click()执行ajax调用,我建议你使用NicelyResynchronizingAjaxController