我有一个watin测试问题,应该浏览pdf并将其上传到网页。这个测试在我的机器上运行顺畅,总是找到pdf,点击提交并等待30秒完成上传。
但是当我尝试在构建机器(teamcity)上运行此测试时,发生该测试时应该等待上传。问题是测试不会超时,即使我在1分钟内将nunit的超时设置为整个测试,或者尝试重新加载页面。测试只是在上传步骤冻结了整个网站。
测试此功能非常重要,但由于那些上传的测试挂起整个构建,我们必须手动完成,而这并不是真正的测试自动化。
有没有人知道如何解决这个上传问题?或至少设法超时此测试。
stack trace = at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at mshtml.DispHTMLBaseElement.click()
at WatiN.Core.InternetExplorer.IEElement.ClickOnElement()
at WatiN.Core.Element.Click()
at WatiN.Core.FileUpload.Set(String fileName)
答案 0 :(得分:1)
我认为这里的问题是您的单元测试依赖于太多的外部资源,例如您的开发机器的文件系统,网络等。
问问自己测试的重要性是什么:您是否可以将任何业务逻辑放入单独的类中?然后你可以为这个类编写测试。您基本上需要的是测试上传过程的所有逻辑,而无需实际上传文件或进入网络。
答案 1 :(得分:1)
问题是WatiN使用sendkeys来设置要上传的文件(名称)。在WatiN 2.0 beta 1中,这改为使用一些API调用。这解决了在自动化需要文本输入的对话框时挂起测试的问题。