<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_StoneSpawn 's Blog</title><subtitle type="text">己所不欲，勿施于人</subtitle><id>http://feed.cnblogs.com/blog/u/28393/rss</id><updated>2011-04-08T05:26:02Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/28393/rss"/><entry><id>http://www.cnblogs.com/stonespawn/archive/2011/04/08/2009341.html</id><title type="text">WatiN——Web自动化测试（三）【弹出窗口处理】</title><summary type="text">上一节我们说了关于WatiN的自动化的框架的设计，一般的系统应用应该可以。关于Case的本身的编写在实际应用中也会有一些问题和难题。这一节我将WatiN的弹出框作一下详细的总结。在实际网页中，操作按钮可能弹出各种样式的弹出框，如何进行有效的处理呢？1、Alert Dialog Alert对话框很简单，弹出之后只是一个提示作用，弹出之后进行确认即可。 public static void CaptureAlertDialog(this Browser browser, Action&amp;lt;AlertDialogHandler&amp;gt; operation, int waitTimeInSecond</summary><published>2011-04-08T05:21:00Z</published><updated>2011-04-08T05:21:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2011/04/08/2009341.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2011/04/08/2009341.html"/><content type="html">&lt;div style="height: 2000px"&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上一节我们说了关于WatiN的自动化的框架的设计，一般的系统应用应该可以。关于Case的本身的编写在实际应用中也会有一些问题和难题。这一节我将&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;WatiN的弹出框作一下详细的总结。在实际网页中，操作按钮可能弹出各种样式的弹出框，如何进行有效的处理呢？&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;1、Alert Dialog &lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;Alert对话框很简单，弹出之后只是一个提示作用，弹出之后进行确认即可。&lt;/div&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;p&gt;public static void CaptureAlertDialog(this Browser browser, Action&amp;lt;AlertDialogHandler&amp;gt; operation, int waitTimeInSeconds)&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;var handler = new AlertDialogHandler();&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;using (new UseDialogOnce(browser.DialogWatcher, handler))&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;operation(handler);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handler.WaitUntilExists(waitTimeInSeconds);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (handler.Exists())&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handler.OKButton.Click();&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;CaptureAlertDialog：是处理alert对话窗方法，其传入的参数分别是：Browser浏览器对象、Acation&amp;lt;AlertDialogHandler&amp;gt; alert句柄、waitTimeSeconds 等待时间&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" style="margin-top:30px;"&gt;&#xD;
&lt;p&gt;context.Browser.CaptureAlertDialog((AlertDialogHandler handler) =&amp;gt;&#xD;
{&#xD;
btn.WaitUntilExistsAndClickNoWait(context.TestConfig.Timeout);&#xD;
}, 5); &lt;/p&gt;&#xD;
&lt;p&gt;btn.WaitUntilExistsAndClickNoWait(context.TestConfig.Timeout); 为button的点击事件。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px; margin-top::20px;"&gt;2、Confirm Dialog&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;p&gt;public static void CaptureConfirmDialog(this Browser browser, Action&amp;lt;ConfirmDialogHandler&amp;gt; operation, int waitTimeInSeconds)&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;var handler = new ConfirmDialogHandler();&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;using (new UseDialogOnce(browser.DialogWatcher, handler))&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;operation(handler);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handler.WaitUntilExists(waitTimeInSeconds);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (handler.Exists())&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handler.OKButton.Click();//确认按钮 handler.CancelButton.Click();取消按钮&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" style="margin-top:10px;"&gt;&#xD;
&lt;p&gt;context.Browser.CaptureConfirmDialog((ConfirmDialogHandler handler) =&amp;gt;&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
btn.WaitUntilExistsAndClickNoWait(context.TestConfig.Timeout);&lt;br /&gt;&#xD;
}, 5);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
btn.WaitUntilExistsAndClickNoWait(context.TestConfig.Timeout);为Button点击事件&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px; margin-top::20px;"&gt;3、文件下载对话框FileDownloadHandler&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;p&gt;var btn = "获取button按钮"; &lt;/p&gt;&#xD;
&lt;p&gt;var fileName = System.Windows.Forms.Application.StartupPath + "保存路径文件名";&lt;br /&gt;&#xD;
FileDownloadHandler fileDownloadHandler = new FileDownloadHandler(fileName);&lt;br /&gt;&#xD;
using (new UseDialogOnce(context.Browser.DialogWatcher, fileDownloadHandler))&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;btn.WaitUntilExistsAndClickNoWait(context.TestConfig.Timeout);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;context.Browser.WaitUntil(5);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;fileDownloadHandler.WaitUntilFileDownloadDialogIsHandled(60);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;fileDownloadHandler.WaitUntilDownloadCompleted(200);&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px; margin-top::20px;"&gt;4、网页对话框（window.open）&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px; margin-top::20px;"&gt;有的网页对话框通过window.open的方式进行打开的是其他的页面，比如通过其他的页面进行添加分类等等，遇到此处的时候应该如何处理呢？其实这等窗口是页&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px; margin-top::20px;"&gt;面，内容可以通过Browser对象来进行获取。&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;p&gt;首先需要将主浏览器对象进行保存，让这个browser对象再打开新窗口，从中获取窗口页面的URL&lt;/p&gt;&#xD;
&lt;p&gt;如下代码：&lt;/p&gt;&#xD;
&lt;p&gt;var orginBrowser = context.Browser;//context.Browser浏览器对象&lt;br /&gt;&#xD;
try&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;Div.Button(btn =&amp;gt; btn.ClassName == "ButtonStyle").WaitUntilExistsAndClick(context.TestConfig.Timeout);//Button按钮，进行onclick事件&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;context.Browser.WaitUntil(3);//等待3秒&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;context.Browser = WatiN.Core.Browser.AttachTo(context.Browser.GetType(), Find.ByUrl(url =&amp;gt; url.IndexOf("页面名称") &amp;gt; -1), context.TestConfig.Timeout);//查找新窗口的页面名称&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;context.Browser.Refresh();//进行刷新&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;///&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;///对窗口中的内容进行操作&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;///&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;context.Browser.Close();&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
catch { }&lt;br /&gt;&#xD;
&amp;nbsp;context.Browser = orginBrowser;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px; margin-top::20px;"&gt;在WatiN自动化测试中，一般遇到的弹出窗口也就上面的四种，基本上都可以解决网页中的问题。&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;img src="http://www.cnblogs.com/stonespawn/aggbug/2009341.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stonespawn/archive/2011/04/08/2009341.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stonespawn/archive/2011/04/06/2007008.html</id><title type="text">WatiN——Web自动化测试（二）</title><summary type="text">利用WatiN进行自动化测试，并不仅仅的将代码堆放在一起就OK了，对于一个成熟的公司，有相对较为稳定的测试流程；那么对于我们来说，需要设计一个较为清晰的结构才能应对测试流程和管理测试用例，如何设计测试用例的框架?比如测试一个用户注册然后登录，进入页面之后，再创建一条记录。因长的测试流程中肯定有功能相似的代码部分，例如登录或者是新增一条记录。如何去编制cases？细分的原则又是什么呢？ 1、TestCases和TestSuite关系(1)TestSuite相当于Case的模块，大量的Case存放肯定是需要划分母块的，否则就难以查询和维护、和实时更新。 (2)TestSuite和TestCase关</summary><published>2011-04-06T09:04:00Z</published><updated>2011-04-06T09:04:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2011/04/06/2007008.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2011/04/06/2007008.html"/><content type="html">&lt;div style="height: 2500px"&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;利用WatiN进行自动化测试，并不仅仅的将代码堆放在一起就OK了，对于一个成熟的公司，有相对较为稳定的测试流程；那么对于我们来说，需要设计&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;一个较为清晰的结构才能应对测试流程和管理测试用例，如何设计测试用例的框架?比如测试一个用户注册然后登录，进入页面之后，再创建一条记录。因长的测试&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;流程中肯定有功能相似的代码部分，例如登录或者是新增一条记录。如何去编制cases？细分的原则又是什么呢？ &lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;1、TestCases和TestSuite关系&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;(1)TestSuite相当于Case的模块，大量的Case存放肯定是需要划分母块的，否则就难以查询和维护、和实时更新。 &lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;(2)TestSuite和TestCase关系图&lt;/div&gt;&#xD;
&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/stonespawn/WatiN/tstc.png" width="363" height="372" /&gt;&lt;br /&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;2、定义测试用例基类TestCasesBase,其内容如下&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;p&gt;public abstract class TestCasesBase&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
/// &amp;lt;summary&amp;gt;&lt;br /&gt;&#xD;
/// 测试用例名称&lt;br /&gt;&#xD;
/// &amp;lt;/summary&amp;gt;&lt;br /&gt;&#xD;
public string CaseDescription = string.Empty;&lt;/p&gt;&#xD;
&lt;p&gt;protected TestContext context;&lt;/p&gt;&#xD;
&lt;p&gt;//初始化TestCases级的环境&lt;br /&gt;&#xD;
public virtual void SetUp()&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;//清除TestCases级产生的垃圾&lt;br /&gt;&#xD;
public virtual void TearDown()&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
if (context.Browser != null)&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
context.Browser.Close();&lt;br /&gt;&#xD;
context.Browser.Dispose();&lt;br /&gt;&#xD;
context.Browser = null;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;//这个方法必须在TC中实现&lt;br /&gt;&#xD;
public virtual void TestBody()&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;//这个方法不需要在TC实现&lt;br /&gt;&#xD;
public virtual void Run(TestContext tcContext)&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
context = tcContext;&lt;br /&gt;&#xD;
SetUp();&lt;br /&gt;&#xD;
TestBody();&lt;br /&gt;&#xD;
TearDown();&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;3、定义测试用例基类模块TestSuiteBase,其内容如下&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;p&gt;public abstract class TestSuiteBase : ILogger&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
//初始化testsuite级的环境&lt;br /&gt;&#xD;
public virtual void SetUpTestCase(TestContext testContext)&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;//清除testsuite级产生的垃圾&lt;br /&gt;&#xD;
public virtual void TearDownTestCase(TestContext testContext)&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;p&gt;public abstract void RunTestCase(TestContext testContext);&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;TestCase中所包含的主要方法是：SetUp、TestBody、TearDown；&#xD;
&lt;div&gt;(1)SetUp是运行TestCase前所需要的参数和运行准备，例如有的Case可能需要配置一些文件，有的可能需要数据表等等&lt;/div&gt;&#xD;
&lt;div&gt;(2)TestBody是测试用例的主体部分，是操作网页中的元素&lt;/div&gt;&#xD;
&lt;div&gt;(3)TearDown是测试用例的清理工作，相当于TestBody打过仗，TearDown进行善后工作；例如经常自动化，那么数据库里的冗余数据非常的多，需要每次执行的以后进行清理工作&lt;/div&gt;&#xD;
TestSuite中所包含的主要方法是：SetUpTestCase、RunTestCase、TearDownTestCase；&#xD;
&lt;div&gt;(1)SetUpTestCase是运行TestSuite前所需要的参数和运行准备&lt;/div&gt;&#xD;
&lt;div&gt;(2)RunTestCase是运行多测试用例&lt;/div&gt;&#xD;
&lt;div&gt;(3)TearDownTestCase是运行TestSuite后的清理工作&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;4、扩展&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;其实TestSuite和TestCase原本并非需要这样组织，完全可以合成一个测试用例进行执行，但是Case的颗粒度过大，无法有效合理的对Case进行管理。在大&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;的项目中，其实Case的颗粒度要远远的大于以上所涉及到的。一个测试用例可能包括很多个步骤。那又个如何进行分割呢？如何进行有效的管理和合理利用？ 如下图：&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/stonespawn/WatiN/tstctc.png" width="704" height="505" /&gt; &lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;当设计到的测试用例过于复杂时，我们则需要将测试用例进行level的划分，理论上可以无限极的划分下去，这样以便于我们更有效的管理和维护；更有效的&lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;是代码的重用，例如：RegisterTC(注册测试用例)可能在不同的TestSuite都有可能用到，那么在其他的TestSuite下，可能只需要list.Add(RegisterTC()) &lt;/div&gt;&#xD;
&lt;div style="line-height: 25px; width: 1003px; height: 25px"&gt;将用例加入list中即可。这次写的比较混乱，也不知道说明白了没有，希望大家拍砖！ &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/stonespawn/aggbug/2007008.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stonespawn/archive/2011/04/06/2007008.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stonespawn/archive/2011/04/02/2003643.html</id><title type="text">WatiN——Web自动化测试（一）</title><summary type="text">软件测试行业目前在国内逐渐的发展起来了，但是国内的软件测试行业主要是 黑盒测试也就是我们平常所说的系统测试或功能测试，但真正做到像微软那样的所有测试开发还是很少。 下面言归正传，讲解一下WatiN。 1、WatiN是什么？ WatiN 即Web Application Testing in .Net，它是在.Net平台喜爱调用IE进行Web 程序测试的开源工具。WatiN的官方网站：http://watin.sourcefoge.net/。 说到Web自动化测试工具，大家可能最熟悉的是QTP，LoadRunner。此两者的强大之处我想大家都有耳闻，另外就是利用Ruby语言开发的自动化测试框架W</summary><published>2011-04-02T07:54:00Z</published><updated>2011-04-02T07:54:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2011/04/02/2003643.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2011/04/02/2003643.html"/><content type="html">&lt;div&gt;&lt;p&gt;&lt;span style="font-family:宋体;"&gt;软件测试行业目前在国内逐渐的发展起来了，但是国内的软件测试行业主要是&lt;/span&gt; &lt;span style="font-family:宋体;"&gt;黑盒测试也就是我们平常所说的系统测试或功能测试，但真正做到像微软那样的所有测试开发还是很少。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:宋体;"&gt;下面言归正传，讲解一下&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:-18.0pt;"&gt;&lt;span&gt;1、&amp;nbsp;&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;是什么？&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;WatiN &lt;span style="font-family:宋体;"&gt;即&lt;/span&gt;Web Application Testing in .Net&lt;span style="font-family:宋体;"&gt;，它是在&lt;/span&gt;.Net&lt;span style="font-family:宋体;"&gt;平台喜爱调用&lt;/span&gt;IE&lt;span style="font-family:宋体;"&gt;进行&lt;/span&gt;Web &lt;span style="font-family:宋体;"&gt;程序测试的开源工具。&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;的官方网站：&lt;/span&gt;&lt;a href="http://watin.sourcefoge.net/"&gt;http://watin.sourcefoge.net/&lt;/a&gt;&lt;span style="font-family:宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;说到&lt;/span&gt;Web&lt;span style="font-family:宋体;"&gt;自动化测试工具，大家可能最熟悉的是&lt;/span&gt;QTP&lt;span style="font-family:宋体;"&gt;，&lt;/span&gt;LoadRunner&lt;span style="font-family:宋体;"&gt;。此两者的强大之处我想大家都有耳闻，另外就是利用&lt;/span&gt;Ruby&lt;span style="font-family:宋体;"&gt;语言开发的自动化测试框架&lt;/span&gt;Watir&lt;span style="font-family:宋体;"&gt;。&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;和&lt;/span&gt;Watir&lt;span style="font-family:宋体;"&gt;之间有很多相似之处，其最大的区别可能就是语言上的区别。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:-18.0pt;"&gt;&lt;span&gt;2、&amp;nbsp;&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;什么用处以及特征？&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span style="font-family:宋体;"&gt;（&lt;/span&gt;1&lt;span style="font-family:宋体;"&gt;）&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;有什么用处，勿容置疑的是，它可以帮助我们进行&lt;/span&gt;Web&lt;span style="font-family:宋体;"&gt;的自动化测试，是不是我们不需要进行任何操作呢，并不是这样的，&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;只是提供我们一个框架，要想是&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;成为我们平时中应用的工具，还必须得开发&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;相关的自动化工具。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;（&lt;/span&gt;2&lt;span style="font-family:宋体;"&gt;）&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;是一种非常容易上手的自动化测试框架，可以帮助我们程序员平时作一些简单的调试和反复工作；&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;是用&lt;/span&gt;C#&lt;span style="font-family:宋体;"&gt;语言进行开发的，所以我们只要了解&lt;/span&gt;C#&lt;span style="font-family:宋体;"&gt;语言就可以进行&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;的开发。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;（&lt;/span&gt;3&lt;span style="font-family:宋体;"&gt;）&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;类库&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/stonespawn/WatiN/WatiN1.png" border="0" alt="" width="869" height="544" /&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;其实我们平时应用中主要的是在&lt;/span&gt;WatiN.Core&lt;span style="font-family:宋体;"&gt;下类以及方法。&lt;/span&gt;WatiN.Core&lt;span style="font-family:宋体;"&gt;中包括了我们平时网页中所有的元素我们只需要使用&lt;/span&gt;IE8&lt;span style="font-family:宋体;"&gt;进行查看，利用相应的类方法进行调用即可。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;WatiN.Core&lt;span style="font-family:宋体;"&gt;下的类的展示及关系&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/stonespawn/WatiN/WatiN2.png" border="0" alt="" width="865" height="604" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:宋体;"&gt;由此看来&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;真的还就不难。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:-18.0pt;"&gt;&lt;span&gt;3、&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:宋体;"&gt;简单的示例展示&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;（&lt;/span&gt;1&lt;span style="font-family:宋体;"&gt;）示例一&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;public static void TestBaiDu1()&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;通过&lt;/span&gt;ID&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (IE ie = new IE("http://www.baidu.com"))&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ie.TextField("kw").TypeText("&lt;/span&gt;&lt;span style="font-family:宋体;"&gt;谷歌&lt;/span&gt;1");&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ie.Button("su").ClickNoWait();&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.Sleep(2000);&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ie.Close();&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;IE ie = new IE("http://www.baidu.com") &lt;span style="font-family:宋体;"&gt;直接打开百度的网页；&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;ie.TextField("kw").TypeText("&lt;span style="font-family:宋体;"&gt;谷歌&lt;/span&gt;1");&lt;span style="font-family:宋体;"&gt;将文本框进行赋值；&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;ie.Button("su").ClickNoWait();&lt;span style="font-family:宋体;"&gt;点击&lt;/span&gt;Button&lt;span style="font-family:宋体;"&gt;事件；&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;ie.Close();ie&lt;span style="font-family:宋体;"&gt;关闭。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;（&lt;/span&gt;2&lt;span style="font-family:宋体;"&gt;）实例二&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;public static void TestBaiDu2()&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;通过&lt;/span&gt;Name&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (IE ie = new IE("http://www.baidu.com"))&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ie.TextField(txt =&amp;gt; txt.Name == "wd").TypeText("&lt;/span&gt;&lt;span style="font-family:宋体;"&gt;谷歌&lt;/span&gt;2");&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ie.Button(btn =&amp;gt; btn.Id == "su").ClickNoWait();&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.Sleep(2000);&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ie.Close();&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;同样的是打开网页，将文本框的赋值和&lt;/span&gt;Button&lt;span style="font-family:宋体;"&gt;的点击事件通过其他的方法进行查找的。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;/p&gt;  &lt;p style="margin-left:18.0pt;text-indent:0cm;"&gt;&lt;span style="font-family:宋体;"&gt;以上就是&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;的最基本的认识，希望大家拍砖，后续我将陆续的写上我研究&lt;/span&gt;WatiN&lt;span style="font-family:宋体;"&gt;的文章，将自己的心得分享给大家，在&lt;/span&gt;Web&lt;span style="font-family:宋体;"&gt;测试中将有很多的问题，包括&lt;/span&gt;IE&lt;span style="font-family:宋体;"&gt;的死锁、无法找到的控件等等。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/stonespawn/aggbug/2003643.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stonespawn/archive/2011/04/02/2003643.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stonespawn/archive/2009/05/05/1450285.html</id><title type="text">网页调用服务程序</title><summary type="text">N长时间都没有写博客了，似乎将自己松懈了，还是工作忙了，还是其他繁琐之事？前几天做一个小的功能，就是在web页面调用系统服务，或者调用自己的服务程序。一些心得和大家分享一下，网上的相关知识点也比较少，MSDN上有很多，但是英文较差的我又点吃力。[代码][代码]原以为简单的调用便可，如下： try {ServiceController sc = new ServiceController("IIsW...</summary><published>2009-05-05T14:54:00Z</published><updated>2009-05-05T14:54:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2009/05/05/1450285.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2009/05/05/1450285.html"/></entry><entry><id>http://www.cnblogs.com/stonespawn/articles/1428813.html</id><title type="text">微软DevWow博客达人征文大赛</title><summary type="text"/><published>2009-04-03T03:22:00Z</published><updated>2009-04-03T03:22:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/articles/1428813.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/articles/1428813.html"/></entry><entry><id>http://www.cnblogs.com/stonespawn/archive/2009/02/24/1397322.html</id><title type="text">小问题 小技巧 ：创建虚拟目录并将IIS里面.net配置版本设为2.0</title><summary type="text">工作闲时：做一个小功能，就是用C#语法创建一个虚拟目录，从网上搜搜都是，但是呢如果机器的.net framework的版本很多，需要设置框架的版本改如何写呢?[代码][代码] 将Asp.net框架的版本设为2.0，其实在虚拟目录属性添加一个属性即可，newVirDir.Properties["ScriptMaps"].Value = ScriptArray().ToArray(); newVirD...</summary><published>2009-02-24T08:16:00Z</published><updated>2009-02-24T08:16:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2009/02/24/1397322.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2009/02/24/1397322.html"/></entry><entry><id>http://www.cnblogs.com/stonespawn/archive/2009/01/16/1376900.html</id><title type="text">小问题 小技巧 ：网站路径问题</title><summary type="text">网站的开发，我总会遇到路径的问题，而且有时还搞不明白。总是自己经过调试之后才知道应用什么路径，如何去取路径。面对这半知半解的 问题，我准备写一写这些小问题，也好给自己长个记性。 1、先从C#中提供的几个方法说起吧：//返回与Web服务器上的指定虚拟路径相对应的物理文件路径 Response.Write(Server.MapPath("~"));Response.Write("&amp;lt;/br&amp;gt;...</summary><published>2009-01-16T04:00:00Z</published><updated>2009-01-16T04:00:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2009/01/16/1376900.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2009/01/16/1376900.html"/></entry><entry><id>http://www.cnblogs.com/stonespawn/archive/2009/01/13/1374863.html</id><title type="text">小问题 小技巧：敲回车默认提交</title><summary type="text">最近做一个简单的登录界面，发现一个小问题，贴出来和大家分享一下。如果大家看着不值一提，请大家拍砖。 平时可能太大意，有些小问题居然都没有发现。我做一个不同的管理员进行管理时，有个dorpdownlist进行选择，就无法进行使用回车键进行登录；如图：  平时进行登录总是没有遇到这样情况，以为敲回车登录是一件很&amp;#8220;天经地义&amp;#8221;的事，可是这次我总是查了很多原因就是没有发现蛛丝马迹。不...</summary><published>2009-01-13T06:42:00Z</published><updated>2009-01-13T06:42:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2009/01/13/1374863.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2009/01/13/1374863.html"/></entry><entry><id>http://www.cnblogs.com/stonespawn/archive/2008/11/06/1327888.html</id><title type="text">IE8 Beta2把我给这样折腾了</title><summary type="text">IE8的Beta1版本出来好长时间了，总是想找个机会玩玩，可偏偏工作忙， 无暇东顾啊，只能等到闲时。今天看了一下，IE8的Beta2版本也出来了，何不尝试一下Beta2版本的新特新和新功能呢？更何况说IE现在是遵守W3C的标准。 本机装的软件我给说几个重点： 系统：windows xp sp2更新很多补丁 IE：IE7（原是IE6） 杀毒软件：kis7.0 最新数据库 傲游浏览器(奥运版) 1、兴...</summary><published>2008-11-06T02:56:00Z</published><updated>2008-11-06T02:56:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/archive/2008/11/06/1327888.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/archive/2008/11/06/1327888.html"/></entry><entry><id>http://www.cnblogs.com/stonespawn/articles/1322956.html</id><title type="text">我的睡觉体会</title><summary type="text"/><published>2008-10-30T05:33:00Z</published><updated>2008-10-30T05:33:00Z</updated><author><name>stonespawn</name><uri>http://www.cnblogs.com/stonespawn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stonespawn/articles/1322956.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stonespawn/articles/1322956.html"/></entry></feed>
