WebUI automation testing framework based on Selenium
介绍: pyse基于selenium(webdriver)进行了简单的二次封装,比selenium提供的方法操作更简洁。
起因:
python + selenium 自动化测试写久了发现selenium(webdriver)提供原生的方法并简便,于是,产生了二次封装的想法。想不到太炫酷的名字,于是各取了两个单词的前两个字母-- pyse。
特点:
所有方法只提供xpath定位,webdriver提供了8种定位方法(id\name\class name\tag name\link text\partial link text\xpath\css selector)但xpath一定程度可以替代id\name\class name\tag name 等方法,本框架所提供的click_text()方法可以替代link text方法,所以只用xpath定位对不影响框架对元素的定位能力,又保证了定位方法的一致性。
本框架只是对selenium(webdriver)原方法的简单封装,精简为30个方法,经过我的自动实践,这些方法完全够胜任于我们的自动化工作。
集成了HTMLTestRunner 测试报告,使生成报告变得很简单。
安装及前提条件:
Python2.7 :https://www.python.org/
selenium: https://pypi.python.org/pypi/selenium
安装pyse : 将其克隆到本地,将pyse目录放到…\Python27\Lib\site-packages\目录下。
例子: 请查看demo目录
先看一下百度搜索的例子:
baidu.py
#coding=utf-8
from pyse import Pyse
from time import sleep
driver = Pyse("chrome")
driver.open("https://ww.baidu.com")
driver.type("//*[@id='kw']",u"pyse自动化测试")
driver.click("//*[@id='su']")
sleep(2)
driver.quit()
再看一个page object 设计模式的例子
page_object_case.py
#coding=utf-8
from pyse import Pyse
from time import sleep
class Page(object):
'''
基本类,用于所页面的继承
'''
login_url = 'http://www.126.com'
def __init__(self, selenium_driver, base_url=login_url, parent=None):
self.base_url = base_url
self.driver = selenium_driver
self.timeout = 30
self.parent = parent
def _iopen(self,url):
url = self.base_url + url
self.driver.open(url)
assert self.on_page(),'Did not land on %s' % url
def iopen(self):
self._iopen(self.url)
def on_page(self):
return self.driver.get_url() == (self.base_url + self.url)
class LoginPage(Page):
'''
126邮箱登录页面模型
'''
url = '/'
def type_username(self,username):
self.driver.type("//*[@id='idInput']",username)
def type_password(self,password):
self.driver.type("//*[@id='pwdInput']",password)
def submit(self):
self.driver.click("//*[@id='loginBtn']")
def test_user_login(driver, username, password):
"""
测试获取的用户名密码 是否可以登录
"""
login_page = LoginPage(driver)
login_page.iopen()
login_page.type_username(username)
login_page.type_password(password)
login_page.submit()
def main():
try:
driver = Pyse("chrome")
username = 'username'
password = 'password'
test_user_login(driver, username, password)
sleep(3)
text = driver.get_text("//span[@id='spnUid']")
assert(text == '[email protected]'),u"用户名称不匹配,登录失败!"
finally:
# 关闭浏览器窗口
driver.close()
if __name__ == '__main__':
main()
再看一个使用unittest单元测试框架的例子。
unittest_case.py
#coding=utf-8
from pyse import Pyse,TestRunner
from time import sleep
import unittest
class baiduTest(unittest.TestCase):
def setUp(self):
self.driver = Pyse("chrome")
self.driver.wait(10)
self.base_url = "http://www.baidu.com"
def test_case(self):
driver = self.driver
driver.open(self.base_url)
driver.click_text("设置")
driver.click_text("搜索设置")
sleep(2)
driver.click("//a[@class='prefpanelgo']")
sleep(1)
driver.accept_alert()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
TestRunner(r".\demo").run()
调用TestRunner()测试类时需要指定一个测试用例的目录,如:E:\mytestpro\test_case 。然后,调用的它的run()方法来运行测试用例。
匹配测试用例文件的规则是*_case.py 。所以,测试文件的命名一定要为 aa_case.py ,a12_case.py等。
它会自动在test_case目录下生成report目录并在其下面生成测试报告。如下:
相比埋头思考苦学,你更需要的是有经验的大佬或同行给你提意见,给大家推荐一个学习交流地,644956177,里面大神会耐心帮助你解决问题,很多问题能够在线解答,另外群里面也有很多书籍资料和基础的视频,都已经打包好了,赶快加入吧。
最后我也整理了一些软件测试学习资料,对于学软件测试的小伙伴来说应该会很有帮助,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这份资料也已经帮助了很多的软件测试的学习者,希望也能帮助到你。需要公众号:软件测试小dao 自取。软件测试,与你同行!陪你成为优秀的测试工程师!
既然都看到这里啦,请你帮个忙:
1、点赞,让更多小伙伴看到;
2、关注我,持续更新测试干货。
敲字不易,如果此文章对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
自动化测试6年后,终于有了属于我自己的团队···
如果你35岁恐慌了,那你真的该反思自己了···
活久见!40W年薪低?35岁测试工程师惨遭女孩嫌弃!估计是被鸡汤洗脑了!
迷茫了3年:做完这个测试项目,我终于决定辞职···