仍然以百度为例,来介绍WebDriver如何进行定位,以及相应的WebDriver API。打开百度,然后这输入Bella,然后点击百度一下,最后,点击关闭,就这么简单,那么,如何在自动化测试里操作呢?
Selenium 2.0的一个新特性,就是集成了WebDriver API。通过WebDriver API,可以很方便、很快速的对元素进行定位。这个特性弥补了原来1.0中Selenium-RC API的不足。
怎么去定位元素呢,前面我们已经安装过FirePath和Firebug了,就是通过这些工具对元素进行操作的。在百度页面,按 F12,就会看到它,这里边你可以右键单击全部展开或全部收起这展开状态。
就在这里定位元素,这里大家会看到,点击某个元素,先选择页面上的一个元素,把这行选中了。如上,选中的行就是输入框。这就是百度按钮展现出来了。
在Python Web Driver中,提供了八种定位元素的方法,每种定位方法都有对应Python方法,参考对比:
第一个就是ID定位方法。怎么去定位呢?这个时候就需要find_element_by_id(),示例:
# 导入selenium的webdriver包
from selenium import webdrier
# 获取火狐Driver
driver = webdriver.Firefox()
# 通过get方法打开百度
driver.get("https://www.baidu.com")
# 寻找kw元素,输入框
driver.find_element_by_id("kw")
# 寻找id为su的元素
driver.find_element_by_id("su")
那么,kw、su这两个id又是哪里来的呢?这就是Firebug中查看HTML元素获取的。看如下示例:
选中行,就可以看到id=“su”的input元素。
在IDE中,当输入关键字的时候,IDE会自动匹配,帮助搜索可用方法。当方法较多的时候,可以通过上下键翻阅。
找到需要的方法之后,可以把Firebug中看到ID复制到参数中。完成之后,开始编译、运行。
一个元素元素,一般包括很多属性,以及每个属性的值,构成了一个属性组合。其他属性也是作为定位元素的一个方法,另一个常用的元素定位方法就是name,比如,当我们需要定位某个元素,但这个似乎没有name,就没法使用name了,必须还要沿用ID的方法。
最后,可以在driver的quit()之前,调用sleep方法,让程序休眠几秒钟,方便我们查看结果;当不需要查看的时候,直接去除sleep操作,进而恢复测试用例到原来的执行速度。
最后
本文已经给大家介绍了WebDriver的两种常用的定位方法,一个是通过find_element_by_id(),一个是find_element_by_name(),实际开发中,就需要按元素的实际情况选择合适的定位方法。