自己动手写Web自动化测试框架(3)

发表于:2014-10-13来源:uml.org.cn作者:不详点击数: 标签:
接下来我们要点击搜索按钮: 有了上面文本框的解释,这一段代码就容易多了吧。这里不在赘述。 聪明的读者一定会问:我们现在使用ID查询控件,如果

  接下来我们要点击搜索按钮:

  有了上面文本框的解释,这一段代码就容易多了吧。这里不在赘述。

  聪明的读者一定会问:我们现在使用ID查询控件,如果我们的控件没有ID怎么办?如果ID是重复的怎么办?

  上面的两种情况都是完全可能的,而且在实际中几乎占据了大部分的情况。(不过ASP.NET里面的控件倒是都有ID,使用这种方法比较方便。)我们下面的例子就是去点击百度首页右上角的登录超级链接。

  首先我们分析一下,登录超级链接是放在一个id为u的div里面,而登录超级链接是没有ID的。我们的思路就是先找到这个id为u的div,然后找他的chidren找到我们想要的这个超级链接,下面是源代码:

//得到一个链接

Console.WriteLine("Clicking Login Button ...");

IHTMLElement userPanel = doc.getElementById("u");

IHTMLElementCollection HyperLinks = ((IHTMLElement2)userPanel).getElementsByTagName("a");

IHTMLElement login = (IHTMLElement)HyperLinks.item(null, 0);

login.click();

  首先我们得到了那个id为u的div,命名为userPanel。这一步和上面没啥区别。

  下面一个语句我们得到了userPanel的控件的所有tag为 a的控件,也就是所有的超级链接。这里有一个小小的需要注意的地方,我们看到这个语句吧IHTMLElement对象强制类型转换成了 IHTMLElement2,很有意思,为啥会这样呢?其实IHTMLElement有4个这样的兄弟,他们之间的方法不同,可以互相转换,我们想要的 getElementsByTagName在IHTMLElement2下面,所以我们就强制类型转换到IHTMLElement2。这个方法返回一个 IHTMLCollection。我们用HyperLinks来储存这个引用。

  因为userPanel的子控件只有登录超级链接这一个,所以我们直接使用index为0来取道这个对象就好了。IHTMLElementCollection里面的item方法详见msdn,我们只需要把第二个index设置为0,就可以取到第一个子对象。

  上次我们讲到了如何控制Web控件,有了上次的基础,我们这一次的东西就会比较简单:如何验证Web控。

  我们知道我们测试的目的就是判断被测产品是不是符合要求,如果是手动的测试,就是点到我们要判断的地方,然后用眼睛去判断出现的东西是不是我们想要的。

  而自动化就稍微复杂一点。我们需要解决两大问题:一个是操纵电脑去点击,另一个就是去检查是不是我们想要的结果。我们前面的文章可以解决操纵浏览器进行浏览,而接下来我们讲的就是如何判断是否正确了。

  不考虑性能测试的话,检查点无非有这么几个:

  * 内容是否正确

  * 样式是否正确

  下面我们以实际代码来讲解如何判断。

  首先判断一下样式,我们接着上次的代码,判断一下百度首页的文本框的大小是不是我们想要的(这个代码接着上次的得到keyword控件之后,Submit之前):

//验证

if (keyword.getAttribute("size", 0).ToString().Equals("36"))

Console.WriteLine("Validation Passed! Size is Correct");

else

Console.WriteLine("Validation Failed! Size is wrong");

  我们可以看到IHTMLElement有getAttribute方法,这个方法可以得到一个Element里面的Attribute,比如value,type,以及css样式之类的,都可以用这个方法得到,见msdn对这个方法的更详细的讲解。

  我们用下面的代码对百度的搜索结果的内容和标题进行判断:

//验证

if(string.Equals(doc.title.Trim(),"百度搜索_colblog.net"))

Console.WriteLine("Validation Passed! Title is Corrected");

else

Console.WriteLine("Validation Failed! Title is wrong");

if (doc.body.innerText.Contains("生生不息"))

Console.WriteLine("Validation Passed! Body contains your string");

else

Console.WriteLine("Validation Failed! Body do not contain");

原文转自:http://www.ltesting.net