Selenium 2.0rc3 点击功能太快?

4 投票
3 回答
2595 浏览
提问于 2025-04-16 20:58

首先,抱歉这个问题有点难懂。

我所在的团队目前正在使用Selenium 2.0rc3(配合Python)来测试我们的网页应用,使用的是Chrome浏览器。当我们用Selenium的2.02b版本时,测试是通过的(虽然速度有点慢,我们还对webdriver做了一些小改动)。但是升级后,测试变得非常快,却开始失败。经过调试,我们发现大多数测试失败是因为webdriver的click()函数没有阻止后续调用。现在我们在每次点击后加了0.5秒的sleep()/timeout,这虽然解决了眼前的问题,但并没有达到我们的主要目标(也就是加快测试速度)。

3 个回答

0

如果你在点击的时候会执行一些ajax请求,我建议你使用NicelyResynchronizingAjaxController这个工具。

1

我试过用selenium-2 rc3的Python库来控制Chrome浏览器。我的体验和你说的正好相反——点击后,驱动程序不知道页面已经准备好了,所以它不能继续执行。这导致测试变得非常慢,因为驱动程序一直在等待。不过,Firefox的驱动程序看起来比较稳定,也许你可以先继续用它,等Chrome的驱动程序再成熟一些再换。

5

你的问题其实不是点击得太快,而是点击的时候那个元素还没出现。解决这个问题有两种方法:

  1. 等到元素出现后再点击
  2. 增加隐式等待时间

我没用过WebDriver的Python版本,不过我可以告诉你在Java中是怎么做的,希望你能找到Python的对应方法。

在Java中,我们有一个叫做 WebDriverWait 的类,可以用来等待一个元素出现。你需要写一个 Function,然后把它传给 until() 方法,这个方法只有在元素存在时才会返回成功。你可以用 driver.findElements( By... ) 来实现,或者把 driver.findElement( By... ) 放在一个异常处理器里。这个 Function 会一直检查,直到它返回真或者超时。

第二种方法是你这个情况的推荐做法,在Java中可以用 driver.manage().timeouts().implicitlyWait( ... ) 来设置。

撰写回答