我是否总是等待"等待"在非ajax页面上使用selenium时页面加载?

时间:2015-08-07 18:29:12

标签: asp.net selenium selenium-webdriver bdd specflow

我正在使用Cucumber,Selenium和Xunit为传统的ASP.Net应用程序编写一些BDD测试。页面的设计方式,每一次"点击"导致从服务器获取新页面。如果我必须自动化特定页面的测试,那么在每次"点击"后,我是否应该有类似于以下的行?

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
wait.Until(...); //Wait until something about the page is true

我不确定Selenium是否会隐式等待页面加载而我没有明确地说明这一点。处理这种情况的推荐模式是什么?

总是对'#34;某些元素"的想法很麻烦。所以我可以把它放在Until方法中,这会导致脆弱的测试。 ASP.Net页面上堆满了大量的动态控件和大量的页面刷新,这使得测试代码非常难以理解。

我建议的解决方案:编写一个隐式执行等待的扩展方法,并使用element-id的参数等待。但我只是将上述问题重构为一个更易于管理的地方。我还有等待明确执行。有没有办法消除它? selenium是否有一些明显的默认值可以处理这种情况而不需要这样的扩展方法,或者这真的是一种自然的方式吗?

1 个答案:

答案 0 :(得分:2)

如果您希望您的测试可靠并且只等待确切需要的时间间隔 - 那么是,使用WebDriverWait的明确等待是一个完美的解决方案。而且,它实际上是一个非常"自然" 的解决方案 - 想想你作为一个用户如何定义加载的页面 - 它通常是你的看到想要的内容,对吗?当您查看加载页面时,您将不断重新评估页面状态,检查是否显示了所需内容。显式等待遵循相同的逻辑 - 默认情况下,每隔500毫秒检查预期条件是否为真,但实例化时不超过X秒 WebDriverWait

如果您需要经常使用wait.until()来电,并希望遵循DRY原则,请考虑应用"Extracting Method"或其他重构方法。

您可以设置将在每个元素搜索上应用的隐式等待,或者引入硬编码的" artificial"延迟,但这不会是可靠的,而且会浪费时间 - 你最终会等待超过需要而且偶尔会出现测试失败。

相关问题