好的,所以我的问题是'我应该再等一段时间说15分钟用webdriver'。使用Thread.Sleep(60 * 1000 * 15)是否可行?让司机等待很长时间可能带来哪些潜在问题会不会变得陈旧?
我必须用这样的等待编写测试的原因是我正在测试与我们的第三方之间的某些集成。我们向他们提交了一些工作,一般来说,工作需要花费几分钟到大约15分钟才能完成工作。
话虽如此,我一直在考虑更昂贵的方法,并使用明确的等待预期条件,并使用Driver.Navigate()。Refresh()直到我看到我期望的元素。我在这里担心的是,如果我采用这种方法,将会有一部分测试,它会在5到10分钟的时间内刷新浏览器10秒左右。哪种方法看起来更好。浏览器是否有可能使浏览器“松动”浏览器?并不是这些方法的粉丝所以任何其他建议都是开放的。
答案 0 :(得分:0)
除了网页上显示的元素之外,是否还有其他迹象表明集成已完成处理?例如。正在某处创建的文件等。
如果没有,那么我肯定会采取第二种方法 - 这是一个更好的方法,因为你只需要等待大约你需要等待的时间,而且如果由于某种原因它需要超过它也不会炸弹您指定的最大金额。我仍然会设置一个上限,例如如果元素未显示,则测试失败20或30分钟。
只要Web应用程序稳定,就不会出现打开和刷新浏览器的问题。而BTW这实际上是测试自动化中非常常见的情况,不幸的是,对于第三方集成,你可以做的事情并不多。
在C#中,它看起来像这样 - /// <summary>
/// Returns an element if found, otherwise returns null
/// </summary>
/// <param name="by"></param>
/// <returns></returns>
internal IWebElement FindElementIfExists(By by)
{
IWebElement element = null;
try
{
element = FindElement(@by);
}
catch (NoSuchElementException)
{
}
return element;
}
public void Test()
{
var stopwatch = Stopwatch.StartNew();
var timeout = 30 // in minutes
browser.GoTo<Page>();
while (FindElementIfExists(By.Id("id")) == null && stopwatch.Elapsed.TotalMinutes < timeout)
{
Thread.Sleep(30); // sleep for 30 seconds
browser.GoTo<Page>();
}
if (stopwatch.Elapsed.TotalMinutes >= timeout)
// fail test
// continue test
}