在selenium python的课程中有给大家讲解po的设计,但是很多小伙伴不是很理解,感觉很迷茫,这里给大家整理讲解一下。
首先我们需要明白po的思想主要是将我们的元素、数据、业务代码分开(ps:其实有的公司不分开做得也很好,这个只要自己做好封装其实咋玩儿都一样)。UI自动化测试其实也可以像开发开发这个页面时候一样,我们首先看:
在这个图片中我们理解为他就是一个页面(page),当我们要去理解这个po设计时,我们有两种理解方式:
1、顺时针理解
2、逆时针理解
顺时针理解就是,我们就拿到这个page,然后把页面所有的元素都全部封装成元素。如下:
class loginPage: def __init__(self,driver): self.get_by_local = getByLocal(driver) #获取用户名element def get_user_element(self): return self.get_by_local.get_local('user') #获取密码element def get_password_element(self): return self.get_by_local.get_local('password') #获取登录按钮element def get_login_element(self): return self.get_by_local.get_local('loginbutton') #获取忘记密码element def get_forget_element(self): return self.get_by_local.get_local('forget') #获取title def get_welcome_element(self): try: return self.get_by_local.get_local('welcome') except: return None
通过这个简短代码我们知道 我们可以把我们的page这样封装起来,让然以此类推,我们可以把其他所有页面都这样封装起来(ps:教学伪代码,还有其他的封装、逻辑处理,这里结合实战课程思路),我们这里已经有了我们的元素,剩下的我们是不是就可以按照handle、business、case这样一层一层的进行封装。
handle的伪代码:
这里我们有了handle层次,也就是说我们这里把所有针对元素的行为都封装起来,你这个元素输入类型我就给你封装一个输入,你是点击类型我就给你点击。你是获取文字类型我就给你获取文字。这样一步一步。当我们操作有了之后我们就要把元素的操作结合到我们业务里面去,这个时候可以来一个business层:
通过这样看,我们是不是发现,这个登录里面就是输入用户、点击登录组合起来,然后这里无外乎你就可以加一些在login时判断一下是不是到了login页面等等。然后我再把case组装起来:
然后发现case调用的就是登录business,然后传递的就是不同用户信息。然后看返回。很多人会很懵逼,有必要这样吗?答案,肯定没有。这是为了教学,让大家明白这个最简单的层是怎么分的。这是顺时针思维。告诉大家了大家就只会知道按照封装就行,但是不知道为什么。下面讲解逆时针教学思维。
逆时针:思考其实我们拿到UI自动化需求的时候我们第一看到的是什么?
其实我们拿到或者看到的就是这个页面。那么这个时候其实对于我们来说或者对于写case的人来说,我最想看到的结果是什么?
1、我输入用户名、密码、验证码、点击注册,然后告诉我注册成功或者失败
2、我输入错误的信息,然后进行注册告诉我对应的提示信息
其实这个是不是就是我最想看到的,是不是就是下面这样:
其实对于case而言,可能这个就我们想看到的,我告诉你什么,然后你告诉我什么。这个就ok了。
所以这个时候我们就可以思考,其实你这个时候是否按照po来设计,都可以,但是封装一定要好。我们po设计的时候应该怎么设计,我们是不是这里看到了login这个方法,那么是不是就说明我们所有的登录操作是不是就有一个单独的处理业务地方,这里回过去看是不是就是我们的business?然后business需要操作是不是就是我们handle,然后以此类推是不是就是page。
但是这里肯定有问题。就是这个是教学思维,有的人会说麻烦,我们能不能把这些麻烦的事情简单了,然后整合在一起。答案肯定是可以的。
一般情况下我们项目中都会这么去封装,当然这个不是绝对,这样在page层次你看到的都是元素+操作,元素我们是统一封装在了basepage里面,也就是所有的basepage有基类。哈哈。
是不是回过头来发现很简单,其实最最最主要的还是思路。思路很重要,大家一定要多思考。
共同学习,写下你的评论
评论加载中...
作者其他优质文章