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

-----Web自动化测试之Webdriver(python)--从零到熟练(系列)

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.ui import 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 本章小节

   本章我们讲述了自动化测试中最常见的元素操作,就像我们在盖高楼大厦之前的砖,水泥和钢筋。虽然这只有这些儿东西,我们不能建起我们的大厦,可是这也是先决条件。必须掌握的东西,本章节我们没有列出所有的元素,因为网站应用的时候非常灵活,我们只讲基本的,对于不常用的,请自行学习。第六章,我们将着手绘制建筑蓝图,讲解自动化测试的实施及测试框架的搭建。

posted @ 2015-03-11 15:04  潜龙9527  阅读(218)  评论(0编辑  收藏  举报