Selenium 2.0主要的特性就是与WebDriverAPI的集成。WebDriver旨在提供一个更简单,更简洁的编程接口以及解决一些Selenium-RC API的限制。Selenium-Webdriver更好的支持页面本身不重新加载而页面的元素改变的动态网页。WebDriver的目标是提供一个良好设计的面向对象的API,提供了对于现代先进web应用程序测试问题的改进支持。
3.1 Webdriver API
Web应用程序的测试主要是基于调用Webdriver API来模拟用户操作,然后判断操作结果是否与预期的一致,从而达到自动化测试的目的。所以熟悉Webdriver的API的使用很重要,也是我们在做自动化测试的先决条件。
Webdriver API网上有官方文档,不过由于种种原因吧,官网不太容易打开。所以我们可以在百度中去搜索相关的文档,结果也非常多。不同语言的API有点儿不太一样,由于我们采用的是Python作为脚本语言,所以建议看出Python版的,推荐以下两个网页:
(1)selenium_webdriver(python)第一版:http://wenku.baidu.com/link?url=PDcKQYNL-iVRlahMunWoY1BDMw5vyUvv-AFCtC6eUCfG0R5XdC0SnBCHdp742uY6riA25FdBfaUtL-N2uZiXj6PXxIyRGcI-bV1QEYSZHGW
(2)虫师的翻译:http://www.cnblogs.com/fnng/archive/2013/06/16/3138283.html
这两篇文档刚好是一个人的,我看了一下写的比较详细,大家就去自行学习一下吧。
关于WebdriverAPI的一点儿说明:
Ø API只是一些儿封闭的方法,大致浏览一下,知道有哪儿些API,完成什么操作即可,没有必要花很多时间去学习,边用边学。
Ø API的学习要灵活,最好把同类的操作放到一起比较一下。因为在编写测试用例的过程中,不仅仅只有一种方法可以达到预期的结果。
Ø 要会使用Eclipse的联想功能。在写测试用例的时候,如果一时想不起来用什么方法了,可以利用联想功能进行查询。
本章我们就不详细讲解这些儿API的使用方法了,重点将放到页面元素的定位及检查点的设置,这些儿是体现一个自动化测试工程师水平的重点。
3.2 页面元素定位
自动化测试是模拟用户对页面元素进行操作的,所以在操作之前,需要先定位到要操作的页面元素。如果页面元素都定位不到,其他的操作将无从谈起。而对页面元素定位技巧,随着经验的增加,将会越来越精准。而在此,我们将从基础谈起,然后再逐步加深!
3.2.1 WebElement对象提供的各种定位元素策略
下面我们先来讲解一下WebElement对象提供的各种常用的定位元素策略:
Ø 通过ID定位元素:
ID:driver.find_element_by_id(<elementID>)
示例:当一个页面元素如下,明显包含id属性,而且属性值是固定的时候,可以使用这个定位方法。
<div id="nav" class="m-subnav">…..</div>
Ex: driver. find_element_by_id(“nav”)
Ø 通过Name定位元素:
Name:driver.find_element_by_name(<elementName>)
示例:当一个页面元素如下,明显包含name属性,而且属性值是固定的时候,可以使用这个定位方法。
<inputtype="text" wx-validator-placeholder="用户名/手机号/邮箱" wx-validator-username-required="*请输入账号" wx-validator-rule="required" name="username" class="foc"placeholder="用户名/手机号/邮箱">
Ex: driver. find_element_by_name(“username”)
Ø 通过ClassName定位元素:
className:driver. find_element_by_class_name(<elementClassName>)
示例:当一个页面元素如下,明显包含name属性,而且属性值是固定的时候,可以使用这个定位方法。
<div class="bx-wrapper" style="max-width:100%;">….</div>
Ex: driver.find_element_by_class_name(“bx-wrapper”)
Ø 通过TagName定位元素:
tagName:driver.find_element_by_tag_name(<htmlTagName>)
示例:当一个页面元素如下,这是一个form元素,如果本页中只有一个form,可以使用这个定位方法。
<form wx-validator="" method="get" action="/deals" autocomplete="off">
<span>
<input type="text" wx-validator-notip="" wx-validator-rule="required" wx-validator-placeholder="输入关键词" name="k" placeholder="输入关键词">
<a class="bh-mhnbo" type="submit" href="javascript:;"></a>
</span>
</form>
Ex: driver.find_element_by_tag_name(“form”)
Ø 通过LinkText定位元素:
linkText:driver.find_element_by_link_text(<linkText>)
示例:当一个页面元素如下,明显是一个超级链接,可以使用这个定位方法。
<a href="http://www.google.com/search?q=cheese">cheese</a>
Ex: driver.find_element_by_link_text(“cheese”)
Ø 通过PartialLinkText定位元素:
partialLinkText:driver.find_element_by_partial_link_text(<partialLinkText>)
示例:当一个页面元素如下,明显是一个超级链接&#