【问题标题】:Watin Unit Tests with Nunit Timing problem带有 Nunit 时序问题的 Watin 单元测试
【发布时间】:2013-01-08 13:23:58
【问题描述】:

您好,我正在使用带有 NUnit (2.5.2.9222) 的 WatiN(版本 2.0.10.928) 如果我有类似的东西

  [Test]
        public void WebPageTest()
        {
            string url = "www.google.com";
            IE ie = new IE(url);
ie.TextField(Find.ByTitle("Google Search")).TypeText("Watin"); ie.Button(Find.ByName("btnG")).Click();
ie.Element(Find.ByText("WatiN")).Click();

        //   ie.WaitForComplete();
        Assert.IsTrue(ie.Text.Contains("Welcome at the WatiN")); 
        ie.Close();
    }

然后通常这会起作用并且测试会通过,但有时当我点击断言时,Watin 似乎还没有完成页面加载并且仍在前一页上。我在使用 IE.Text 或 IE.Url 属性时遇到了这个问题。我尝试使用 WaitForComplete() (即使这不应该是必需的)但有时仍然会遇到同样的问题。
以前有人遇到过WatiN这个问题吗? 有没有人像这样成功地将 WatiN 与 NUnit 一起使用?或者也许它会更好地使用像 MBUnit 这样的不同单元测试框架?有没有人在 MBunit 上运气更好?

【问题讨论】:

    标签: nunit watin


    【解决方案1】:

    恐怕您使用的测试框架不会有什么不同——这是任何屏幕抓取测试框架的“陷阱”之一,WaTin 也不例外。

    WaitForComplete() 电话肯定是必要的,恐怕。

    我的一些同事报告说,IE 的版本可以有所作为;特别是 IE6 有一些可能导致问题的内部时序问题。 IE8 似乎要好一些。

    【讨论】:

      【解决方案2】:

      我的测试也遇到了同样的问题;不幸的是,您似乎无法假设Click() 方法中固有的WaitForComplete() 将正常工作。即使之后明确调用WaitForComplete() 也并不总是有效。

      作为最后的手段,我们使用System.Threading.Thread.Sleep(int timeout_in_milliseconds) 来强制浏览器给页面加载时间。这不是一种完全防弹的方法,但它已经消除了大约 90% 的此类错误。对于超时,我们使用了 500 到 2000 毫秒之间的任何值,具体取决于加载所需的时间以及我们希望测试运行的速度。

      【讨论】:

        【解决方案3】:

        尝试使用

            [Test]  
            public void WebPageTest()  
            {  
                string url = "www.google.com";  
                IE ie = new IE(url);  
                ie.TextField(Find.ByTitle("Google Search")).TypeText("Watin");  
                var btnG = ie.Button(Find.ByName("btnG"));  
                btnG.ClickNoWait();  
                ie.WaitForComplete(400);  
                var elementWatin = ie.Element(Find.ByText("WatiN"));  
                elementWatin.ClickNoWait();  
                ie.WaitForComplete(400);  
                Assert.IsTrue(ie.Text.Contains("Welcome at the WatiN"));  
                ie.Close();  
            }
        

        谢谢 甘地拉詹

        【讨论】:

          【解决方案4】:

          我使用了 ie.WaitForComplete() 但它仍然强制等待,有时它会超时,所以我使用

            Settings.AttachToBrowserTimeOut = 200;
            Settings.WaitForCompleteTimeOut = 200;
          

          这对我有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多