-----Web自动化测试之Webdriver(python)--从零到熟练(系列)
经过我们对自动化测试环境的搭建,页面元素的定位,测试点的验证以及自动化测试用例的初探等的学习,可以说我们可以编写自动化测试用例了。本章节我们将对常用的页面元素的自动化操作,作一下详细的介绍,以便大家在以后编写自动化测试用例的时候更加得心应手。
5.1 输入类元素
现在很多网站都实行会员制或是实名制的,所以注册和登录是非常常见的操作,在一个网站上输入各种信息也是必不可少的,我们首先讲解输入类元素。
5.1.1 input和textarea元素
这两个是最常见的操作,这是的input的type为text和password类型,不是上传图片的,上图片我们下节再讲。对于这类输入文本的元素操作对于python是一种操作,先对元素进行定位,然后调用send_keys()函数,进行输入。
例:
def inputvalue(self,findby,elmethod,value):
'''
通过定制定位方法,在输入框中输入值
@param findby: 定位方法,如:byid,byname,byclassname,byxpath等
@param elmethod: 要定位元素的属性值 ,如:id,name,class name,xpath等
@param value: 要给文本框输入的值
'''
if(findby == 'byid'):
self.driver.find_element_by_id(elmethod).send_keys(value)
elif(findby == 'byname'):
self.driver. find_element_by_name(elmethod).send_keys(value)
elif(findby =='byclassname'):
self.driver.find_element_by_class_name(elmethod).send_keys(value)
elif(findby == 'byxpath'):
self.driver.find_element_by_xpath(elmethod).send_keys(value)
这个inputvalue函数就是我对这类操作函数进行的封装,根据不同的定位类型,先对要输入的元素进行操作,然后send_keys(value)将关键字输入进去。
注:有些儿网站在输入框失去焦点后不会清除里面默认的字符,为了确保输入正确,我们在定位到元素后先调用clear()函数,将默认的字符清除后再进行输入操作。
5.1.2 input上传文件
当input的type为file时,说明这个元素是上传文件的,这个时候我们的普通操作是,单击这个元素,然后在弹出的上传文件对话框中选择要上传的文件,最后是单击上传按钮。
而在我们写自动化测试的时候,如果按这个步骤操作的话,会非常麻烦,因为我们无法定位弹出的上传文件对话框,要借助于第三方工具。其实没有必要这么麻烦,我们可以按照上面的上传文字的方法,不过参数不是文件 ,是文件路径,这样就能上传了。
例:
self. Driver.find_element_by_xpath (location).send_keys(filepath);
这个例子是用id来定位的,然后把文件路径作为参数传给这个元素。
注:这个文件路径最好是相对路径,将文件和代码放到一起,这样在代码放到其他的地方运行的时候,就不会出现找不到需要上传文件的现象了。
5.1.3 特殊按键的输入
在输入过程中,有的时候我们需要输入特殊的按键,可是组合键。如按ESC或是CTRL+A等 ,这些儿我们无法用键盘输入的键,应该如何输入呢?
其实和普通的字符输入差不多,不过需要调用特殊的类Key,例如:
(1)执行按ESC键操作
self.driver.find_element_by_name ('image_file').send_keys(Keys.ESCAPE)
(2)执行按CTRL+a键操作
self.driver.find_element_by_name ('image_file').send_keys((Keys.CONTROL, 'a'))
当然对元素的输入操作这些儿是常见的,也有不常见的,如果遇到,可以酌情处理,多尝试几种方法。
5.2 单击类元素
好像自从鼠标出现后,用鼠标完成的操作越来越多了,在我们自动化测试过程中,单击类操作是必不可少的操作之一。下面我们来看一下单击类操作的自动化测试代码:
5.2.1 按钮类元素单击
在页面上单击按钮用来完成特定的操作,比较登录,注册,提交等。方法是,先定位到这个元素,然后调用click()函数。
例如:
def clickitem(self,findby,elmethod):
'''
通过定制定位方法,在对应的项目上执行单击操作
@param findby: 定位方法,如:byid,byname,byclassname,byxpath等
@param elmethod: 要定位元素的属性值 ,如:id,name,class name,xpath,text等
'''
if(findby == 'byid'):
self.driver.find_element_by_id(elmethod).click()
elif(findby == 'byname'):
self.driver.find_element_by_name(elmethod).click()
elif(findby == 'byxpath'):
self.driver.find_element_by_xpath(elmethod).click()
elif(findby == 'bytext'):
self.driver.find_element_by_text(elmethod).click()
elif(findby == 'byclassname'):
self.driver.find_element_by_class_name(elmethod).click()
函数clickitem()通过各种定位方法,先将要定位的元素定位,然后执行click()操作。
5.2.2 超级链接单击操作
在网站上单击超级链接,从而执行相应的操作。可以像按钮一样,先定位到这个超级链接,然后执行click()函数。但是针对超级链接,有专门的定位方法 :
driver.find_element_by_link_text(link_text).click()
或
driver.find_element_by_partial_link_text(link_text).click()
将超级链接全部文字或是部分文字用来定位,然后调用click()函数,就可以完成单击操作。
5.2.3 鼠标右击和双击操作
虽然在测试过程中,对被测试元素进行右击和双击操作不太常用,可是这两个操作还是很有用的。对于不太常用的操作,webdriver就没有将这个操作封装到Element类中,而是在ActionChains