您的位置:首页 > 其它

第五章 常用页面元素自动化操作

2015-03-17 15:23 148 查看
经过我们对自动化测试环境的搭建,页面元素的定位,测试点的验证以及自动化测试用例的初探等的学习,可以说我们可以编写自动化测试用例了。本章节我们将对常用的页面元素的自动化操作,作一下详细的介绍,以便大家在以后编写自动化测试用例的时候更加得心应手。

5.1 输入类元素

现在很多网站都实行会员制或是实名制的,所以注册和登录是非常常见的操作,在一个网站上输入各种信息也是必不可少的,我们首先讲解输入类元素。

5.1.1 input和textarea元素

这两个是最常见的操作,这是的input的type为text和password类型,不是上传图片的,上图片我们下节再讲。对于这类输入文本的元素操作对于python是一种操作,先对元素进行定位,然后调用send_keys()函数,进行输入。

例:

definputvalue(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 类中。以下用例参考了虫师的博客(/article/4666280.html,他的博客写的相当好,建议去学习一下。)

引用ActionChains类:

from selenium.webdriver.common.action_chains import ActionChains

(1)右击操作:

chain = ActionChains(driver)
implement = driver.find_element_by_xpath(“location”)
chain.context_click(implement).perform()
(3)双击操作:

qqq =driver.find_element_by_xpath("location")

#对定位到的元素执行鼠标双击操作

ActionChains(driver).double_click(qqq).perform()

对于其他的鼠标操作,请参考我们推荐的博客,自行学习,我们本章只讲常用的操作。

5.3 选择类元素

在网站创建过一再要求操作要简单化,为了减少用户操作,就会提供很多选择类的操作,如超级链接类品牌选择,单选类操作,复选类操作,下拉菜单类选择操作等。这类操作有的是简单的单击一下,有的需要调用相应的函数,所以我们下面详细讲述一下。

5.3.1 超级链接类选择

超级链接类选择往往出现在购物网站上,如京东,淘宝等。这类型的选择其实没有什么特殊的,可以采用上面提到的超级连接定位法,普通的定位,单击要选择的分类即可。

此时注意,不同分类的选择,有可能显示结果的地方是新页面,或是iframe,此时要检测搜索的结果,就要先切换到新页面或是iframe当中。

5.3.2 单选框选择

在填写信息的时候,经常会遇到性别选择,或是其他类型的单选按钮的选择。其实单选框如同普通元素,先对其进行定位,然后执行click()操作。

例如:

sexelem=driver.find_element_by_xpath(“sex”)

sexelem.click()

执行了操作后,定位的单选按钮就处于选中状态了。如果不想选中 个单选按钮,可以单击其他的单选项,或是招待clear()函数,就取消选中。判断单选按钮是否处于选中状态,可以调用函数isSelected().

注:有的单选按钮的选择圆圈和显示文字可以分开定位,此时单击哪一个都可以,要考虑哪儿个方便定位。

5.3.3 复选框选择

为了增加用户体验,给用户提供更多的选择,复选框的应用也是非常多的。复选框的使用是很简单的,定位到相应的复选框,然后单击。例如:

pricelem=driver.find_element_by_xpath(“price”)

pricelem.click()

复选框的操作和单选框差不多,想取消选择,可以调用clear()函数,也可以再次单击就可以取消选择。判断是否选中,调用函数isSelected()。判断是否可用,调用函数isEnabled()。

5.3.4 下拉菜单类选择

在填写信息的时候,城市的选择;可是对页面信息的选择,都会用到下拉菜单。在webdriver+python中,对应的是Select类,如:

from selenium.webdriver.support.uiimport Select

我们要操作下拉菜单,先用普通元素的定位方法,定位到这个元素,然后转化为select类型的。

select =Select(self.driver.find_element_by_id(“selected”))

接下来调用select_by_visible_text()函数来选择对应的菜单项。

例:select.select_by_visible_text(“北京”)

在java版的webdriver还有其他的相应操作,不过python好像只有这一个操作。对于下拉菜单,还可以像普通元素一样,先单击下拉菜单,拉出菜单项,然后单击对应的选择项。不过这样操作时而好用,时而不好用,不建议用这种方法,此处只提供一种参考。

5.4 获取元素的文本

在设置检测点的时候,我们经常需要获取操作后影响到页面元素,然后和预期的相比。所以此时用到最多的就是获取元素的文本,与预期的相比,相同则说明测试通过。

获取元素文本的方法,不管你是div,link,或是其他的元素,都是一样的。先定位到这个元素,然后获取text属性。例如:

def gettext(self,findby,elmethod):

'''

通过定制定位方法,获取指定元素的文本

@param findby: 定位方法,如:byid,byname,byxpath等

@param elmethod: 要定位元素的属性值,如:id,name,xpath等

@return: 返回获取到的元素文本

'''

if(findby == 'byid'):

return self.driver.find_element_by_id(elmethod).text

elif(findby == 'byname'):

return self.driver.find_element_by_name(elmethod).text

elif(findby == 'byxpath'):

return self.driver.find_element_by_xpath(elmethod).text

elif (findby=='byclassname'):

return self.driver.find_element_by_class_name(elmethod).text

elif (findby=='bycss'):

return self.driver.find_element_by_css(elmethod).text

gettext()函数通过各种定位方法,定位到要获取text的元素,然后将text返回。

5.5 页面或iframe切换

在自动化测试过程中,难免会遇到,打开新页面或是切换到新的iframe中的情况。如果我们不将代码做相应的切换操作,将句柄切到新的页面或是iframe中,我们定位的时候,将出现找不到元素的情况。所以,在适当的时候切换一下句柄,然后再进行测试操作。

5.3.1 页面间的切换

在网页中单击链接打开新网页,然后在新打开的页面中操作或是验证新页面中操作的结果等操作。如果我们用Selenium IDE录制脚本的时候,回放或是调试代码,执行到打开新页面后就会提示元素找不到。可是我们用Selenium IDE验证的时候,能找到要定位的元素,这是什么原因啊?

其实就是当前的driver句柄在第一次打开页面的时候,取的是页面句柄,但是当我们打开新页面后,句柄还是原来的页面的。在原来的页面上查找新页面的元素,当然会找不到了。所以在我们验证新页面的元素的时候,需要先调用switch_to_window(0将句柄切换到新打开的页面。

例如:

self.driver.switch_to_window(self.driver.window_handles[-1])

self.driver.window_handles为获取所有打开窗口的句柄,-1为获取最后一个窗口的句柄,即最新打开的窗口的句柄。

5.3.2 iframe间的切换

iframe间的切换在正常的页面中偶尔会遇到,如果要自动化测试后台相关的内容,则iframe是非常多的。几乎所有的操作都要在不同的iframe之间进行切换,本节我们只讲一种方法,更多的方法请参考:http://blog.sina.com.cn/s/blog_68f262210101mcxp.html

例如现在页面上有两个iframe,一个name属性为“frame1”,另一个name属性为“frame2”,我们现在需要将句柄切换到frame2中:

this.driver.switchTo().frame("frame2”);

注:切换过iframe后,就可以在这个里面定位元素或是执行操作了。有的时候如果程序招待太快,可能会出现句柄切换不成功的现象,此时在切换句柄语句后,添加等待操作,然后再去查找就可以成功了。

5.4 本章小节

本章我们讲述了自动化测试中最常见的元素操作,就像我们在盖高楼大厦之前的砖,水泥和钢筋。虽然这只有这些儿东西,我们不能建起我们的大厦,可是这也是先决条件。必须掌握的东西,本章节我们没有列出所有的元素,因为网站应用的时候非常灵活,我们只讲基本的,对于不常用的,请自行学习。第六章,我们将着手绘制建筑蓝图,讲解自动化测试的实施及测试框架的搭建。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: