-
什么是
selenium
?
selenium
自动化测试工具,
它
主要是用于
Web
应用程序的自动化测试,
但肯
定不只局限于此,同时支持所有基于
web
的管理任务自动化。
sel
enium
经历了两个版本,
selenium1.0
和
selenium2.0
,
< br>selenium
也不是简单一
个工具,而是由几个工具
组成,每个工具都有其特点和应用场景。
Selenium IDE
:
Selenium Grid
Selenium RC
Selenium 2.0
Selenium
RC
在浏览器中运行
JavaScr
ipt
应用,使用浏览器内置的
JavaScript
翻译器来翻译和执行
selenese
命令(<
/p>
selenese
是
selenium<
/p>
命令集合)
。
WebDriver
通过原生浏览器或者浏览器扩展直接控制浏览器。
WebDriver
针对
各个浏览器而开发,取代了嵌入到被测
W
eb
应用中的
JavaScript
。
与浏览器的紧
密集成支持创建更高级的测试,避免了
JavaS
cript
安全模型导致的限制。除了来
自浏览器厂商的支持,
WebDriver
还利用操作系统级的调用模拟用户输入。<
/p>
web
driver
提供了一系列的元素定位方法,常用的有以下几种:
id
,
name
,
class
name
,
tag
name
,
link
text
,
partial link text
,
xpath
,
css
selector
分别对应
Python
Webdriver
中的方法为:
find_element_by
_link_text(
新闻
find
_element_by_partial_link_text(
新
< br>
//
局部模糊定位
(关键字一定要唯一)
Xpath
定位
用绝对路径定位:
find_element_by_xpath(
当我们所要定位的元素很难找
到合适的方式时,
都可以通过这种绝对路径的方式
定位,
缺点是当元素在很多级目录下时,
我们不得不要写很长的路径,
而且这种
方式难以阅读和维护。
相对路径定位:
find_element_by_xpath(
#
通过自身的
id
属性定位
find_elem
ent_by_xpath(
'input-container'
]/input
#
< br>通过上一级目
录的
id
属性定位
find_element_by_xpath(
'hd'
]/form/span/input
#
通过上三级目录
< br>的
id
属性定位
find_element_by_xpath(
'q'
]/form/span/input
#
通过上三级目
录的
name
< br>属性定位
通过上面的例子,我们可以看到
XPath
的定位方式非常灵活和强大的,而且
XPath
可以做
布尔逻辑运算
,例如:
//div[@id=' hd ' or @name=' q ' ]
当然,它的缺陷也非常明显:
1
p>
、性能差,定位元素的性能要比其它大多数方
式差;
2
、
不够健壮,
XPath<
/p>
会随着页面元素布局的改变而改变;
3.
兼容性不好,
在不同的浏览器下对
XPath
的实现是不一样的。
操作测试对象:
Webdriver
中比较常用的操作元素的方法有下面几个:
clear
清除元素的内容
send_keys
在元素上模拟按键输入
click
单击元素
submit
提交表单
submit()
要求提交对象是一个表单,更强调对信息的提交。
click()
更强调事件的独
立性。
(比如,一个文字链接
就不能用
submit()
方法。
)<
/p>
WebElement
接口常用方法
WebElement
接口除了我们前面介绍的方法外,
它还包含了别的一些有用的方法。
下面,我们例举几个比较有用的方法
。
size
(返回元素的尺寸。
)例:
#
返回百度输入框的宽高
size =
_element_by_id(
print size
text
(获取元素的文本)例:
#
返回百度页面底部备案信息
text = t_by_id(
print text
get_attribute(name)
(获取属性值)例:
p>
#
返回元素的属性值,可以是
id
、
name
、
type
或元素拥有的其他任意属性
attribute = _element_by_id(
print attribute
(这个方法在定位一组数据时将变得非常有用)
is_displayed()
(设置该元素是否用户可见)
例:
#
p>
返回元素的结果是否可见,返回结果为
True
或
False
result = _element_by_id(
print result
鼠标事
件:实际的
web
产品测试中发现,有关鼠标的操作,不单单只
有单机,
有时候还用到右击,双击,拖动等操作,这些操作包含在
ActionChains
类中。
ActionChains
类鼠标操
作的常用方法:
context_click()
右击
double_click()
双击
drag_and_drop()
拖动
move_to_element()
鼠标悬停在一个元素上
click_and_hold()
按下鼠标左键在一个元素上
鼠标右击操作:
context_click()
(右键点击一个元素)
例:
#
p>
引入
ActionChains
类
from
_chains
import
ActionChains
...
#
定位到要右击的元素
right = _element_by_xpath(<
/p>
XX
#
对定位到的元素执行鼠标右键操作
ActionChains(driver).contex
t_click(right).perform()
ActionChains(driver)
:
driver
:
webdr
iver
实例执行用户操作。
ActionChains
p>
用于生成用户的行为:所有的行为都存储在
ActionChain
s
对象。通过
perform()
执行存储的行为。
per
form()
:执行所有
ActionChains
中存储的行为。
perfrom()
同样也是
p>
ActionChains
类提供的方法,通常与
ActionChains()
配合使用。
键盘事件:有
时候我们在测试时需要使用
tab
键将焦点转移到下一个元素,
用于
验证元素的排序是否正确。
we
bdriver
的
keys()
类提供
键盘上所有按键的操作,
甚
至可以模拟一些组合键的操作,如<
/p>
Ctrl+A
,
Ctrl+C/Ctrl
+V
等。在某些更复杂的情
况下,还会出现使用
send_keys
来模拟上下键来操作下拉列表的情况。
代码示例:
打印信息
通常我们可以通过获得页面的
tit
le
、
URL
地址,页面上的标识性信
息(如:
登录成功的“欢迎,
XXX
”
信息)来判断用例执行成功。
在实际测试中,访问
1
个页面然后判断其
title
是否符合预期是很常见的一
个用例,假如一个页面的
tit
le
应该是“百度一下”
,那么用例可以这样描述:访
问该页面,判断页面
title
是否等于“百度
一下”
。
获取当前
URL
也是非常重要的一个操作,在某些情况下,你访问一个
U
RL
,
这时系统会自动对这个
URL<
/p>
进行跳转,这就是所谓的“重定向”
。一般测试重定
向的方法是访问这个
URL
,
然后等待页面重定向完毕之后,
获取当前页面的
URL
,
判断该
URL
是否
符合预期。如果页面的
URL
返回不正确,而表示当前操作没有
进行正常的跳转。
示例代码:
设置等待时间:
sle
ep()
:设置固定休眠时间。
Python
< br>的
time
包提供了休眠方法
s
leep()
,导入
time
包后就可
以使用
sleep()
进行脚本的执行过程进行休眠。
implicity_wait()
:是
webdi
rver
提供的一个超时等待。等待一个元素被发现,
或一个命
令完成。如果超出了设置时间则抛出异常。
WebDriverWait()
:
同样也是
webdirver
提供的方法。
在设置时间内,
默认每隔
一段时间检测一次当前页面元素是否存在,
如果超过设置时间检测不到
则抛出异
常。
代码如下: