用PO的思想去重构或者管理行为驱动测试能使测试更有效率。
以携程网登录场景为例,项目中体现PO思想的是page目录下的两个文件分别为“base.py”和“loginPage.py”。
其中“base.py”文件代码抽取了一些基本的方法,如元素定位的方法;打开网站方法和得到当前网页标题等方法。其代码如下:
#学习有疑问请联系作者 #作者qq:2574674466 #作者邮箱2574674466@qq.com #coding=utf-8 from selenium.webdriver.common.by import By class Base: def __init__(self,driver): self.driver = driver #*loc 函数参数是指传入的是不定参数,这个知识点在前面章节已经提到过 #意思是findele函数可以传入1个参数,也可以传入2个参数等等。 def findele(self,*loc): return self.driver.find_element(*loc) def get_url(self,url): self.driver.get(url) def get_title(self): return self.driver.title
- page目录下的另外一个文件loginPage.py其目的是为了封装登录页面的操作,将这些操作以类成员方法的形式展现。注意类“loginPage”的构造函数的实现逻辑,具体内容已在以下的代码注释中写明
#学习有疑问请联系作者 #作者qq:2574674466 #作者邮箱2574674466@qq.com #coding=utf-8 from features.com.page.base import Base from selenium.webdriver.common.by import By #loginPage继承了Base类 class loginPage(Base): #以下为类的初始化函数,其又调用了父类的初始化函数,这样做的目的是为了 #将context.driver串起来,在调用PO类时,可以使用超级全局变量context下的driver对象 def __init__(self,context): super(loginPage,self).__init__(context.driver) def login(self,username): self.findele(By.ID,"nloginname").send_keys(username)
- 项目主目录下有文件environment.py,其主要目的是对行为驱动环境进行配置,可以被全局调用。其代码如下:
#学习有疑问请联系作者 #作者qq:2574674466 #作者邮箱2574674466@qq.com #coding=utf-8 from selenium import webdriver def before_all(context): context.driver = webdriver.Chrome("chromedriver路径") def after_tag(contex): context.driver.quit()
项目主目录下有文件example.feature,其定义了行为驱动要执行的场景描述细节
Feature: Login Scenario:open website When I open the login website "https://passport.ctrip.com/user/login?" Then I input username "tim"
在目录steps下有文件example.py,其定义了行为驱动场景的实现过程,注意代码中涉及到了正则表达式的使用,具体见如下代码细节
#coding=utf-8 from behave import * from features.com.page.loginPage import loginPage #以下re表示在step中定义正则表达式,要使用正则表达式 use_step_matcher('re') #这里表示开始抓取正则表达式的匹配值,此次是为了抓取在场景文件example.feature中的url值, #抓取到之后传值给url,然后进行下面的操作 @when('I open the login website "([^"]*)"') def step_reg(context,url): loginPage(context).get_url(url) @Then('I input username "([^"]*)"') def step_r(context,code): loginPage(context).login(code)
- 执行测试,测试结构如图12.8所示:
视频、学习笔记联系qq:2574674466
更多内容请关注公众号:“大牛测试