让 UI 测试变得更便捷 - violent-webdriver
本文为原创资源,欢迎分享,转载
起源
出问题了
相信大家对 Selenium & UI 测试都不陌生,然而在实践过程中可能会碰到如下几个问题~
被测试执行过程中遇到的各种偶发错误所困扰;
为确保一个用例操作的正确执行而写了非常多冗余的代码 ( time.sleep() 等 );
各种异常情况导致的测试结果不准确。
怎么办
笔者当然也碰到过这些问题,于是乎有了 violent-webdriver ( 基于 python ) 的诞生。
什么是 violent-webdriver ?
violent-webdriver 诞生于二次封装 Selenium Webdriver,内部封装了许多方法来确保浏览器操作的执行性,你不需要去担心定位到的元素是否存在于当前页面或者元素是否在当前时刻处于可点击状态,报错重试机制可以帮你自动解决这些不必要的麻烦。
简单来说,violent-webdriver 就是一个 Selenium 插件库,以 对测试友好的角度 重新封装了 Selenium 内部的方法。
使用
安装
安装过程非常简单,还是一样的 pip install 大法 ( 请先确保正确安装了 Selenium 以及对应的浏览器驱动 ):
pip install violent-webdriver
最佳实践
假设我们拥有如下一条用例, 并且我们需要将该用例转化成 自动化测试用例。
用例执行步骤:
访问百度首页
搜索 test
点击进入第一个搜索结果
验证搜索结果是否为「百度翻译」
验证翻译结果是否为「测试」
使用了 violent-webdriver 后,我们测试代码可以这么写~ (如下所示):
核心代码
# 导包
from violent_webdriver import Chrome
# 初始化 driver
dr = Chrome.violent_chromedriver(executable_path='C://MyDownloads/Download/chrome-win32/chromedriver.exe',
use_mobile_emulation=True)
# 访问「百度首页」
dr.get('https://www.baidu.com')
# 导入 TouchActions
from selenium.webdriver.common.touch_actions import TouchActions
# 期待标题
expected_title = '百度翻译'
# 期待翻译结果
expected_result = '测试'
# 百度搜索框输入 test
dr.v_send_keys(locate_rule={'id': 'index-kw'}, message='test')
# 点击搜索按钮
dr.v_click(locate_rule={'id': 'index-bn'})
# 点击第一个命中的搜索结果 (框架内默认对第一个满足条件的元素进行操作)
dr.v_click(locate_rule={'tag name': 'em', 'text': 'test'})
# 获取实际的标题
actual_title = dr.v_get_text(locate_rule={'css selector': '.sfa-title'})
# 获取实际的翻译结果
actual_result = dr.v_get_text(locate_rule={'css selector': 'p[class=\'trans-content\']'})
# 趣味性断言 ~ .~
if actual_title and actual_title == expected_title and actual_result and actual_result == expected_result:
dr.execute_script('alert(\'测试通过୧(๑•̀◡•́๑)૭\')')
else:
dr.execute_script('alert(\'测试失败o(╥﹏╥)o\')')
代码讲解
每一行代码都有非常明确的注释,相信读者可以清晰的看到,我并没有加入任何的 time.sleep , 并且能通过一个简单的参数传递 ( use_mobile_emulation ) 实现移动端的模拟。
执行过程
运行代码后执行过程如下(动图可能需要时间加载~):
测试通过୧(๑•̀◡•́๑)૭
总结
当 UI 测试代码量逐渐增大、测试流程越来越复杂时,我相信,violent-webdriver 一定能帮助到你~
希望大家能从本篇文章有所收获~ 再推荐一本 Selenium 的权威书籍~