项目重构
|
@ -9,6 +9,8 @@
|
|||
- 使用技术:Python+Selenium4+Requests+Allure2+Pytest+Jenkins+Pymysql+selenium4 Grid
|
||||
- 我已经成功地在公司中落地了此框架,集成了大约 2w+的自动化 case,如果这个项目对你有帮助或启发,请多多点赞!
|
||||
- 建议Python 版本 >= 3.9
|
||||
- **希望各位大佬多多 star**
|
||||
- ![img.png](img.png)
|
||||
### 项目目录简介
|
||||
|
||||
1. [config](config) --> 存放配置文件
|
||||
|
|
Before Width: | Height: | Size: 93 KiB |
|
@ -1,21 +0,0 @@
|
|||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://m.z-trip.cn/login2?from=guide的元素:('xpath', "//button[@type='button']")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://m.z-trip.cn/login2?from=guide上的元素('xpath', "//button[@type='button']")已可见,共计等待2.15秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://m.z-trip.cn/login2?from=guide页面的: ('xpath', "//button[@type='button']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://m.z-trip.cn/login2?from=guide的元素:('xpath', "//input[@placeholder='请输入手机/邮箱']")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://m.z-trip.cn/login2?from=guide上的元素('xpath', "//input[@placeholder='请输入手机/邮箱']")已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://m.z-trip.cn/login2?from=guide页面的: ('xpath', "//input[@placeholder='请输入手机/邮箱']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://m.z-trip.cn/login2?from=guide页面下的属性为:('xpath', "//input[@placeholder='请输入手机/邮箱']")的元素,输入内容为13248231369
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://m.z-trip.cn/login2?from=guide的元素:('xpath', "//input[@placeholder='请输入密码']")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://m.z-trip.cn/login2?from=guide上的元素('xpath', "//input[@placeholder='请输入密码']")已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://m.z-trip.cn/login2?from=guide页面的: ('xpath', "//input[@placeholder='请输入密码']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://m.z-trip.cn/login2?from=guide页面下的属性为:('xpath', "//input[@placeholder='请输入密码']")的元素,输入内容为1@Cai000000
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://m.z-trip.cn/login2?from=guide的元素:('xpath', "//span[@class='ic']")可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://m.z-trip.cn/login2?from=guide上的元素('xpath', "//span[@class='ic']")已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://m.z-trip.cn/login2?from=guide页面的: ('xpath', "//span[@class='ic']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://m.z-trip.cn/login2?from=guide页面,属性为('xpath', "//span[@class='ic']")的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://m.z-trip.cn/login2?from=guide的元素:('xpath', "//div[@class='btn1 btn']")可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://m.z-trip.cn/login2?from=guide上的元素('xpath', "//div[@class='btn1 btn']")已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://m.z-trip.cn/login2?from=guide页面的: ('xpath', "//div[@class='btn1 btn']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://m.z-trip.cn/login2?from=guide页面,属性为('xpath', "//div[@class='btn1 btn']")的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 判断https://m.z-trip.cn/login2?from=guide页面的元素('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]")是否存在
|
||||
[35mDEBUG [0m Log:logs.py:68 用例执行完成,截图成功,文件名称为1711768979.481618.png
|
Before Width: | Height: | Size: 203 KiB |
Before Width: | Height: | Size: 93 KiB |
|
@ -1,41 +0,0 @@
|
|||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/login?_top_=1的元素:('id', 'input-username')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/login?_top_=1上的元素('id', 'input-username')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/login?_top_=1页面的: ('id', 'input-username') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://admin.z-trip.cn/login?_top_=1页面下的属性为:('id', 'input-username')的元素,输入内容为13248231369
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/login?_top_=1的元素:('xpath', '//input[@type="password"]')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/login?_top_=1上的元素('xpath', '//input[@type="password"]')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/login?_top_=1页面的: ('xpath', '//input[@type="password"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://admin.z-trip.cn/login?_top_=1页面下的属性为:('xpath', '//input[@type="password"]')的元素,输入内容为@Cai000000
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/login?_top_=1的元素:('xpath', '//button[text()="登录"]')可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/login?_top_=1上的元素('xpath', '//button[text()="登录"]')已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/login?_top_=1页面的: ('xpath', '//button[text()="登录"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://admin.z-trip.cn/login?_top_=1页面,属性为('xpath', '//button[text()="登录"]')的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 判断https://admin.z-trip.cn/login?_top_=1页面的元素('xpath', '//div[@class="sys-nav"]/a[text()="注销"]')是否存在
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面exist的元素:('xpath', '//div[@class="sys-nav"]/a[text()="注销"]')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:exist上的元素('xpath', '//div[@class="sys-nav"]/a[text()="注销"]')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位exist页面的: ('xpath', '//div[@class="sys-nav"]/a[text()="注销"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 切换https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的ifram('xpath', '//iframe')
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', '//iframe')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', '//iframe')已可见,共计等待1.03秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', '//iframe') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']")已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面下的属性为:('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']")的元素,输入内容为蔡伟超
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', '//button[contains(text(),"查询")]')可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', '//button[contains(text(),"查询")]')已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', '//button[contains(text(),"查询")]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面,属性为('xpath', '//button[contains(text(),"查询")]')的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', "//a[text()='代客下单 »']")可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', "//a[text()='代客下单 »']")已可点击,共计等待1.04秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', "//a[text()='代客下单 »']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面,属性为('xpath', "//a[text()='代客下单 »']")的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://www.z-trip.cn/v/votapub/booking/flight?&clientEc=SU9QeENaeEdXZ0pKcGp5UDBlNUJlN2dPVng1OFRWWTFkdlkvSFZKMlBZZ3ZHdEpzVWxvUnIzZ0VDbEIrOEhpVWJ6TVh1V2ZUWTF5Q2plOWlKVHVaajFKcWpaVjNnZWpTa2FlN2NWWmljOXUxZ2FPYWthUEg0dU9USVBCWkgzbi95OGxoM2lvOFgzcmJ4SmJEZkZWVUhjdkpZZDRxUEY5NllSK2hXV0ttNWZ6QnFNZ2Nmb0Q0N2ZPa3lRYSt5Q2tranFZVkJidVVxbFg3c1VDMDBJTDRRZz09P2FwcElkPXRlbS13ZWItaDUma2V5SWQ9NA%253D%253D的元素:('xpath', "//span[text()='首页']")可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://www.z-trip.cn/v/votapub/booking/flight?&clientEc=SU9QeENaeEdXZ0pKcGp5UDBlNUJlN2dPVng1OFRWWTFkdlkvSFZKMlBZZ3ZHdEpzVWxvUnIzZ0VDbEIrOEhpVWJ6TVh1V2ZUWTF5Q2plOWlKVHVaajFKcWpaVjNnZWpTa2FlN2NWWmljOXUxZ2FPYWthUEg0dU9USVBCWkgzbi95OGxoM2lvOFgzcmJ4SmJEZkZWVUhjdkpZZDRxUEY5NllSK2hXV0ttNWZ6QnFNZ2Nmb0Q0N2ZPa3lRYSt5Q2tranFZVkJidVVxbFg3c1VDMDBJTDRRZz09P2FwcElkPXRlbS13ZWItaDUma2V5SWQ9NA%253D%253D上的元素('xpath', "//span[text()='首页']")已可点击,共计等待0.02秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://www.z-trip.cn/v/votapub/booking/flight?&clientEc=SU9QeENaeEdXZ0pKcGp5UDBlNUJlN2dPVng1OFRWWTFkdlkvSFZKMlBZZ3ZHdEpzVWxvUnIzZ0VDbEIrOEhpVWJ6TVh1V2ZUWTF5Q2plOWlKVHVaajFKcWpaVjNnZWpTa2FlN2NWWmljOXUxZ2FPYWthUEg0dU9USVBCWkgzbi95OGxoM2lvOFgzcmJ4SmJEZkZWVUhjdkpZZDRxUEY5NllSK2hXV0ttNWZ6QnFNZ2Nmb0Q0N2ZPa3lRYSt5Q2tranFZVkJidVVxbFg3c1VDMDBJTDRRZz09P2FwcElkPXRlbS13ZWItaDUma2V5SWQ9NA%253D%253D页面的: ('xpath', "//span[text()='首页']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://www.z-trip.cn/v/votapub/booking/flight?&clientEc=SU9QeENaeEdXZ0pKcGp5UDBlNUJlN2dPVng1OFRWWTFkdlkvSFZKMlBZZ3ZHdEpzVWxvUnIzZ0VDbEIrOEhpVWJ6TVh1V2ZUWTF5Q2plOWlKVHVaajFKcWpaVjNnZWpTa2FlN2NWWmljOXUxZ2FPYWthUEg0dU9USVBCWkgzbi95OGxoM2lvOFgzcmJ4SmJEZkZWVUhjdkpZZDRxUEY5NllSK2hXV0ttNWZ6QnFNZ2Nmb0Q0N2ZPa3lRYSt5Q2tranFZVkJidVVxbFg3c1VDMDBJTDRRZz09P2FwcElkPXRlbS13ZWItaDUma2V5SWQ9NA%253D%253D页面,属性为('xpath', "//span[text()='首页']")的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://www.z-trip.cn/v/vcommon/home的元素:('xpath', "//p[contains(text(),'蔡伟超')]")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://www.z-trip.cn/v/vcommon/home上的元素('xpath', "//p[contains(text(),'蔡伟超')]")已可见,共计等待1.03秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://www.z-trip.cn/v/vcommon/home页面的: ('xpath', "//p[contains(text(),'蔡伟超')]") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 文本获取操作:获取https://www.z-trip.cn/v/vcommon/home页面下的属性为:('xpath', "//p[contains(text(),'蔡伟超')]")的元素的文本内容
|
||||
[35mDEBUG [0m Log:logs.py:68 用例执行完成,截图成功,文件名称为1711769006.5161018.png
|
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 203 KiB |
|
@ -1,21 +0,0 @@
|
|||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://passport.z-trip.cn/login的元素:('xpath', '//input[@placeholder="手机号/邮箱"]')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://passport.z-trip.cn/login上的元素('xpath', '//input[@placeholder="手机号/邮箱"]')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://passport.z-trip.cn/login页面的: ('xpath', '//input[@placeholder="手机号/邮箱"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://passport.z-trip.cn/login页面下的属性为:('xpath', '//input[@placeholder="手机号/邮箱"]')的元素,输入内容为13248231369
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://passport.z-trip.cn/login的元素:('xpath', '//input[@id="submitLogin"]')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://passport.z-trip.cn/login上的元素('xpath', '//input[@id="submitLogin"]')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://passport.z-trip.cn/login页面的: ('xpath', '//input[@id="submitLogin"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://passport.z-trip.cn/login页面下的属性为:('xpath', '//input[@id="submitLogin"]')的元素,输入内容为@Cai000000
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://passport.z-trip.cn/login的元素:('xpath', "//input[@id='chkpersist']")可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://passport.z-trip.cn/login上的元素('xpath', "//input[@id='chkpersist']")已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://passport.z-trip.cn/login页面的: ('xpath', "//input[@id='chkpersist']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://passport.z-trip.cn/login页面,属性为('xpath', "//input[@id='chkpersist']")的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://passport.z-trip.cn/login的元素:('xpath', '//input[@type="button"]')可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://passport.z-trip.cn/login上的元素('xpath', '//input[@type="button"]')已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://passport.z-trip.cn/login页面的: ('xpath', '//input[@type="button"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://passport.z-trip.cn/login页面,属性为('xpath', '//input[@type="button"]')的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://passport.z-trip.cn/login的元素:('xpath', "//p[contains(text(),'蔡伟超')]")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://passport.z-trip.cn/login上的元素('xpath', "//p[contains(text(),'蔡伟超')]")已可见,共计等待5.09秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://passport.z-trip.cn/login页面的: ('xpath', "//p[contains(text(),'蔡伟超')]") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 文本获取操作:获取https://passport.z-trip.cn/login页面下的属性为:('xpath', "//p[contains(text(),'蔡伟超')]")的元素的文本内容
|
||||
[35mDEBUG [0m Log:logs.py:68 用例执行完成,截图成功,文件名称为1711768988.0537002.png
|
|
@ -1,50 +0,0 @@
|
|||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/login?_top_=1的元素:('id', 'input-username')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/login?_top_=1上的元素('id', 'input-username')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/login?_top_=1页面的: ('id', 'input-username') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://admin.z-trip.cn/login?_top_=1页面下的属性为:('id', 'input-username')的元素,输入内容为13248231369
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/login?_top_=1的元素:('xpath', '//input[@type="password"]')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/login?_top_=1上的元素('xpath', '//input[@type="password"]')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/login?_top_=1页面的: ('xpath', '//input[@type="password"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://admin.z-trip.cn/login?_top_=1页面下的属性为:('xpath', '//input[@type="password"]')的元素,输入内容为@Cai000000
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/login?_top_=1的元素:('xpath', '//button[text()="登录"]')可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/login?_top_=1上的元素('xpath', '//button[text()="登录"]')已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/login?_top_=1页面的: ('xpath', '//button[text()="登录"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://admin.z-trip.cn/login?_top_=1页面,属性为('xpath', '//button[text()="登录"]')的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 判断https://admin.z-trip.cn/login?_top_=1页面的元素('xpath', '//div[@class="sys-nav"]/a[text()="注销"]')是否存在
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面exist的元素:('xpath', '//div[@class="sys-nav"]/a[text()="注销"]')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:exist上的元素('xpath', '//div[@class="sys-nav"]/a[text()="注销"]')已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位exist页面的: ('xpath', '//div[@class="sys-nav"]/a[text()="注销"]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 切换https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的ifram('xpath', '//iframe')
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', '//iframe')可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', '//iframe')已可见,共计等待1.03秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', '//iframe') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']")已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 输入操作:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面下的属性为:('xpath', "//input[@placeholder='姓名/拼音/手机/邮箱']")的元素,输入内容为蔡伟超
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', '//button[contains(text(),"查询")]')可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', '//button[contains(text(),"查询")]')已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', '//button[contains(text(),"查询")]') 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面,属性为('xpath', '//button[contains(text(),"查询")]')的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage的元素:('xpath', "//a[text()='代客下单H5 »']")可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage上的元素('xpath', "//a[text()='代客下单H5 »']")已可点击,共计等待1.03秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面的: ('xpath', "//a[text()='代客下单H5 »']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://admin.z-trip.cn/vcommon/jsp/pss/tmc/searchUserPage页面,属性为('xpath', "//a[text()='代客下单H5 »']")的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 判断https://saic.service.z-trip.cn/home页面的元素('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]")是否存在
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面exist的元素:('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:exist上的元素('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]")已可见,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位exist页面的: ('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 判断https://saic.service.z-trip.cn/home页面的元素('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]")是否存在
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面exist的元素:('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:exist上的元素('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]")已可见,共计等待0.02秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位exist页面的: ('xpath', "//span[contains(@class,'name') and contains(text(),'蔡伟超')]") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://saic.service.z-trip.cn/home的元素:('xpath', "//li[@id='mypage']")可点击
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://saic.service.z-trip.cn/home上的元素('xpath', "//li[@id='mypage']")已可点击,共计等待0.01秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://saic.service.z-trip.cn/home页面的: ('xpath', "//li[@id='mypage']") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 点击:https://saic.service.z-trip.cn/home页面,属性为('xpath', "//li[@id='mypage']")的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 -开始-等待页面https://saic.service.z-trip.cn/common/mypage的元素:('xpath', "//div[@class='name']//div")可见
|
||||
[35mDEBUG [0m Log:logs.py:68 页面:https://saic.service.z-trip.cn/common/mypage上的元素('xpath', "//div[@class='name']//div")已可见,共计等待1.03秒
|
||||
[35mDEBUG [0m Log:logs.py:68 正在定位https://saic.service.z-trip.cn/common/mypage页面的: ('xpath', "//div[@class='name']//div") 的元素
|
||||
[35mDEBUG [0m Log:logs.py:68 文本获取操作:获取https://saic.service.z-trip.cn/common/mypage页面下的属性为:('xpath', "//div[@class='name']//div")的元素的文本内容
|
||||
[35mDEBUG [0m Log:logs.py:68 用例执行完成,截图成功,文件名称为1711769025.034914.png
|
||||
[35mDEBUG [0m Log:logs.py:68 用例执行完成,截图成功,文件名称为1711769026.189253.png
|
|
@ -1,2 +0,0 @@
|
|||
"Epic","Feature","Story","FAILED","BROKEN","PASSED","SKIPPED","UNKNOWN"
|
||||
"","","登录用例合集","3","0","1","0","0"
|
|
|
@ -1 +0,0 @@
|
|||
{"uid":"b1a8273437954620fa374b796ffaacdd","name":"behaviors","children":[{"name":"登录用例合集","children":[{"name":"登录-H5用户名密码登录","uid":"76f2c2bc9dc3a14f","parentUid":"5cf9d6ae0ea676f1f3973247f26c598f","status":"failed","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"登录-PC端登录","uid":"3a44948921b0187b","parentUid":"5cf9d6ae0ea676f1f3973247f26c598f","status":"failed","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到pc","uid":"9eaf38b3a1c900ec","parentUid":"5cf9d6ae0ea676f1f3973247f26c598f","status":"failed","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到H5","uid":"18feb626809ab3f0","parentUid":"5cf9d6ae0ea676f1f3973247f26c598f","status":"passed","time":{"start":1711769007680,"stop":1711769026189,"duration":18509},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]}],"uid":"5cf9d6ae0ea676f1f3973247f26c598f"}]}
|
|
@ -1,2 +0,0 @@
|
|||
"Category","FAILED","BROKEN","PASSED","SKIPPED","UNKNOWN"
|
||||
"Product defects","3","0","0","0","0"
|
|
|
@ -1 +0,0 @@
|
|||
{"uid":"4b4757e66a1912dae1a509f688f20b0f","name":"categories","children":[{"name":"Product defects","children":[{"name":"AssertionError: assert False is True\n + where False = <bound method IndexPage.check_login of <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30>>()\n + where <bound method IndexPage.check_login of <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30>> = <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30>.check_login\n + where <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30> = IndexPage(<selenium.webdriver.chrome.webdriver.WebDriver (session=\"35997527527872559de08d4e768973a7\")>)","children":[{"name":"登录-H5用户名密码登录","uid":"76f2c2bc9dc3a14f","parentUid":"36e4137ce111daed00fcfb31060503fa","status":"failed","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]}],"uid":"36e4137ce111daed00fcfb31060503fa"},{"name":"AssertionError: assert '蔡伟超' == '2蔡伟超'\n - 2蔡伟超\n ? -\n + 蔡伟超","children":[{"name":"登录-PC端登录","uid":"3a44948921b0187b","parentUid":"91b61e3e92b22d92b55fe6573dae0ac8","status":"failed","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到pc","uid":"9eaf38b3a1c900ec","parentUid":"91b61e3e92b22d92b55fe6573dae0ac8","status":"failed","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]}],"uid":"91b61e3e92b22d92b55fe6573dae0ac8"}],"uid":"8fb3a91ba5aaf9de24cc8a92edc82b5d"}]}
|
|
@ -1 +0,0 @@
|
|||
{"uid":"83edc06c07f9ae9e47eb6dd1b683e4e2","name":"packages","children":[{"name":"TestCase.TestCheck.Test_pp.test_login","children":[{"name":"登录-H5用户名密码登录","uid":"76f2c2bc9dc3a14f","parentUid":"b05c1a57c96b385c8421e2b047c57716","status":"failed","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"登录-PC端登录","uid":"3a44948921b0187b","parentUid":"b05c1a57c96b385c8421e2b047c57716","status":"failed","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到pc","uid":"9eaf38b3a1c900ec","parentUid":"b05c1a57c96b385c8421e2b047c57716","status":"failed","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到H5","uid":"18feb626809ab3f0","parentUid":"b05c1a57c96b385c8421e2b047c57716","status":"passed","time":{"start":1711769007680,"stop":1711769026189,"duration":18509},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]}],"uid":"TestCase.TestCheck.Test_pp.test_login"}]}
|
|
@ -1,5 +0,0 @@
|
|||
"Status","Start Time","Stop Time","Duration in ms","Parent Suite","Suite","Sub Suite","Test Class","Test Method","Name","Description"
|
||||
"passed","Sat Mar 30 11:23:27 CST 2024","Sat Mar 30 11:23:46 CST 2024","18509","TestCase.TestCheck.Test_pp","test_login","TestLogin","","","代客下单-后台代客下单到H5",""
|
||||
"failed","Sat Mar 30 11:21:50 CST 2024","Sat Mar 30 11:22:59 CST 2024","69189","TestCase.TestCheck.Test_pp","test_login","TestLogin","","","登录-H5用户名密码登录",""
|
||||
"failed","Sat Mar 30 11:23:09 CST 2024","Sat Mar 30 11:23:26 CST 2024","17291","TestCase.TestCheck.Test_pp","test_login","TestLogin","","","代客下单-后台代客下单到pc",""
|
||||
"failed","Sat Mar 30 11:23:00 CST 2024","Sat Mar 30 11:23:07 CST 2024","7344","TestCase.TestCheck.Test_pp","test_login","TestLogin","","","登录-PC端登录",""
|
|
|
@ -1 +0,0 @@
|
|||
{"uid":"98d3104e051c652961429bf95fa0b5d6","name":"suites","children":[{"name":"TestCase.TestCheck.Test_pp","children":[{"name":"test_login","children":[{"name":"TestLogin","children":[{"name":"登录-H5用户名密码登录","uid":"76f2c2bc9dc3a14f","parentUid":"df1633b75cf99f947ee06656f2e598bc","status":"failed","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"登录-PC端登录","uid":"3a44948921b0187b","parentUid":"df1633b75cf99f947ee06656f2e598bc","status":"failed","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到pc","uid":"9eaf38b3a1c900ec","parentUid":"df1633b75cf99f947ee06656f2e598bc","status":"failed","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到H5","uid":"18feb626809ab3f0","parentUid":"df1633b75cf99f947ee06656f2e598bc","status":"passed","time":{"start":1711769007680,"stop":1711769026189,"duration":18509},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]}],"uid":"df1633b75cf99f947ee06656f2e598bc"}],"uid":"aa50c3674349ebe62846b4880229063d"}],"uid":"5ff32718bb0156572a7d88f67a692e02"}]}
|
|
@ -1 +0,0 @@
|
|||
{"uid":"ab17fc5a4eb3bca4b216b548c7f9fcbc","name":"timeline","children":[{"name":"caiweichaodeMacBook-Pro.local","children":[{"name":"47460-MainThread","children":[{"name":"代客下单-后台代客下单到H5","uid":"18feb626809ab3f0","parentUid":"4e0cecf666bf4a48b13ffbcf58438ce6","status":"passed","time":{"start":1711769007680,"stop":1711769026189,"duration":18509},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"登录-PC端登录","uid":"3a44948921b0187b","parentUid":"4e0cecf666bf4a48b13ffbcf58438ce6","status":"failed","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"登录-H5用户名密码登录","uid":"76f2c2bc9dc3a14f","parentUid":"4e0cecf666bf4a48b13ffbcf58438ce6","status":"failed","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]},{"name":"代客下单-后台代客下单到pc","uid":"9eaf38b3a1c900ec","parentUid":"4e0cecf666bf4a48b13ffbcf58438ce6","status":"failed","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"flaky":false,"newFailed":false,"newPassed":false,"newBroken":false,"retriesCount":0,"retriesStatusChange":false,"parameters":[],"tags":["pp","@pytest.mark.usefixtures('case_teardown_h5')"]}],"uid":"4e0cecf666bf4a48b13ffbcf58438ce6"}],"uid":"02adecf43a2e805cd0c6f715700a300f"}]}
|
|
@ -1,12 +0,0 @@
|
|||
launch_status failed=3 1711769066000000000
|
||||
launch_status broken=0 1711769066000000000
|
||||
launch_status passed=1 1711769066000000000
|
||||
launch_status skipped=0 1711769066000000000
|
||||
launch_status unknown=0 1711769066000000000
|
||||
launch_time duration=115956 1711769066000000000
|
||||
launch_time min_duration=7344 1711769066000000000
|
||||
launch_time max_duration=69189 1711769066000000000
|
||||
launch_time sum_duration=112333 1711769066000000000
|
||||
launch_problems product_defects=3 1711769066000000000
|
||||
launch_retries retries=0 1711769066000000000
|
||||
launch_retries run=4 1711769066000000000
|
|
@ -1,10 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Allure Report summary mail</title>
|
||||
</head>
|
||||
<body>
|
||||
Mail body
|
||||
</body>
|
||||
</html>
|
|
@ -1,12 +0,0 @@
|
|||
launch_status_failed 3
|
||||
launch_status_broken 0
|
||||
launch_status_passed 1
|
||||
launch_status_skipped 0
|
||||
launch_status_unknown 0
|
||||
launch_time_duration 115956
|
||||
launch_time_min_duration 7344
|
||||
launch_time_max_duration 69189
|
||||
launch_time_sum_duration 112333
|
||||
launch_problems_product_defects 3
|
||||
launch_retries_retries 0
|
||||
launch_retries_run 4
|
Before Width: | Height: | Size: 15 KiB |
|
@ -1 +0,0 @@
|
|||
[{"data":{"Product defects":3}}]
|
|
@ -1 +0,0 @@
|
|||
[{"data":{"duration":115956}}]
|
|
@ -1 +0,0 @@
|
|||
[{"data":{"failed":3,"broken":0,"skipped":0,"passed":1,"unknown":0,"total":4}}]
|
|
@ -1 +0,0 @@
|
|||
{"4e04e6948b321124446d5ec27dbee4a4":{"statistic":{"failed":1,"broken":0,"skipped":0,"passed":0,"unknown":0,"total":1},"items":[{"uid":"3a44948921b0187b","status":"failed","statusDetails":"AssertionError: assert '蔡伟超' == '2蔡伟超'\n - 2蔡伟超\n ? -\n + 蔡伟超","time":{"start":1711768980639,"stop":1711768987983,"duration":7344}}]},"497df2a393e7d9f23330d2fa709cc5b3":{"statistic":{"failed":0,"broken":0,"skipped":0,"passed":1,"unknown":0,"total":1},"items":[{"uid":"18feb626809ab3f0","status":"passed","time":{"start":1711769007680,"stop":1711769026189,"duration":18509}}]},"695cd58ce0a7866483b0fb11be177ad9":{"statistic":{"failed":1,"broken":0,"skipped":0,"passed":0,"unknown":0,"total":1},"items":[{"uid":"9eaf38b3a1c900ec","status":"failed","statusDetails":"AssertionError: assert '蔡伟超' == '2蔡伟超'\n - 2蔡伟超\n ? -\n + 蔡伟超","time":{"start":1711768989222,"stop":1711769006513,"duration":17291}}]},"6a0573dbc0492ef6c831cda1f3354418":{"statistic":{"failed":1,"broken":0,"skipped":0,"passed":0,"unknown":0,"total":1},"items":[{"uid":"76f2c2bc9dc3a14f","status":"failed","statusDetails":"AssertionError: assert False is True\n + where False = <bound method IndexPage.check_login of <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30>>()\n + where <bound method IndexPage.check_login of <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30>> = <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30>.check_login\n + where <PageObject.PlatformPublic.H5.index_page.IndexPage object at 0x102c9dc30> = IndexPage(<selenium.webdriver.chrome.webdriver.WebDriver (session=\"35997527527872559de08d4e768973a7\")>)","time":{"start":1711768910233,"stop":1711768979422,"duration":69189}}]}}
|
|
@ -1 +0,0 @@
|
|||
[{"data":{"run":4,"retry":0}}]
|
|
@ -1,34 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Allure Report</title>
|
||||
<link rel="icon" href="favicon.ico">
|
||||
<link rel="stylesheet" type="text/css" href="styles.css">
|
||||
<link rel="stylesheet" type="text/css" href="plugin/screen-diff/styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="alert"></div>
|
||||
<div id="content">
|
||||
<span class="spinner">
|
||||
<span class="spinner__circle"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div id="popup"></div>
|
||||
<script src="app.js"></script>
|
||||
<script src="plugin/behaviors/index.js"></script>
|
||||
<script src="plugin/packages/index.js"></script>
|
||||
<script src="plugin/screen-diff/index.js"></script>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-FVWC4GKEYS"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-FVWC4GKEYS', {
|
||||
'allureVersion': 'dev',
|
||||
'reportUuid': 'dd95c05c-a591-4375-8dc8-5ac56740a70a',
|
||||
'single_file': false
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,206 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
allure.api.addTranslation('en', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Behaviors'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Features by stories',
|
||||
showAll: 'show all'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('ru', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Функциональность'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Функциональность',
|
||||
showAll: 'показать все'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('zh', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: '功能'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: '特性场景',
|
||||
showAll: '显示所有'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('de', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Verhalten'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Features nach Stories',
|
||||
showAll: 'Zeige alle'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('nl', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Functionaliteit'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Features en story’s',
|
||||
showAll: 'Toon alle'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('he', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'התנהגויות'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'תכונות לפי סיפורי משתמש',
|
||||
showAll: 'הצג הכול'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('br', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Comportamentos'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Funcionalidades por história',
|
||||
showAll: 'Mostrar tudo'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('ja', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: '振る舞い'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'ストーリー別の機能',
|
||||
showAll: '全て表示'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('es', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Funcionalidades'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Funcionalidades por Historias de Usuario',
|
||||
showAll: 'mostrar todo'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('kr', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: '동작'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: '스토리별 기능',
|
||||
showAll: '전체 보기'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('fr', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Comportements'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Thèmes par histoires',
|
||||
showAll: 'Montrer tout'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('pl', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Zachowania'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Funkcje według historii',
|
||||
showAll: 'pokaż wszystko'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('az', {
|
||||
tab: {
|
||||
behaviors: {
|
||||
name: 'Davranışlar'
|
||||
}
|
||||
},
|
||||
widget: {
|
||||
behaviors: {
|
||||
name: 'Hekayələr üzrə xüsusiyyətlər',
|
||||
showAll: 'hamısını göstər'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTab('behaviors', {
|
||||
title: 'tab.behaviors.name', icon: 'fa fa-list',
|
||||
route: 'behaviors(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)',
|
||||
onEnter: (function (testGroup, testResult, testResultTab) {
|
||||
return new allure.components.TreeLayout({
|
||||
testGroup: testGroup,
|
||||
testResult: testResult,
|
||||
testResultTab: testResultTab,
|
||||
tabName: 'tab.behaviors.name',
|
||||
baseUrl: 'behaviors',
|
||||
url: 'data/behaviors.json',
|
||||
csvUrl: 'data/behaviors.csv'
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
allure.api.addWidget('widgets', 'behaviors', allure.components.WidgetStatusView.extend({
|
||||
rowTag: 'a',
|
||||
title: 'widget.behaviors.name',
|
||||
baseUrl: 'behaviors',
|
||||
showLinks: true
|
||||
}));
|
|
@ -1,120 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
allure.api.addTranslation('en', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Packages'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('ru', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Пакеты'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('zh', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: '包'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('de', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Pakete'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('nl', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Packages'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('he', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'חבילות'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('br', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Pacotes'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('ja', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'パッケージ'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('es', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Paquetes'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('kr', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: '패키지'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('fr', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Paquets'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('pl', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Pakiety'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTranslation('az', {
|
||||
tab: {
|
||||
packages: {
|
||||
name: 'Paketlər'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
allure.api.addTab('packages', {
|
||||
title: 'tab.packages.name', icon: 'fa fa-align-left',
|
||||
route: 'packages(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)',
|
||||
onEnter: (function (testGroup, testResult, testResultTab) {
|
||||
return new allure.components.TreeLayout({
|
||||
testGroup: testGroup,
|
||||
testResult: testResult,
|
||||
testResultTab: testResultTab,
|
||||
tabName: 'tab.packages.name',
|
||||
baseUrl: 'packages',
|
||||
url: 'data/packages.json'
|
||||
});
|
||||
})
|
||||
});
|
|
@ -1,200 +0,0 @@
|
|||
(function () {
|
||||
var settings = allure.getPluginSettings('screen-diff', { diffType: 'diff' });
|
||||
|
||||
function renderImage(src) {
|
||||
return (
|
||||
'<div class="screen-diff__container">' +
|
||||
'<img class="screen-diff__image" src="' +
|
||||
src +
|
||||
'">' +
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
|
||||
function findImage(data, name) {
|
||||
if (data.testStage && data.testStage.attachments) {
|
||||
var matchedImage = data.testStage.attachments.filter(function (attachment) {
|
||||
return attachment.name === name;
|
||||
})[0];
|
||||
if (matchedImage) {
|
||||
return 'data/attachments/' + matchedImage.source;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function renderDiffContent(type, diffImage, actualImage, expectedImage) {
|
||||
if (type === 'diff') {
|
||||
if (diffImage) {
|
||||
return renderImage(diffImage);
|
||||
}
|
||||
}
|
||||
if (type === 'overlay' && expectedImage) {
|
||||
return (
|
||||
'<div class="screen-diff__overlay screen-diff__container">' +
|
||||
'<img class="screen-diff__image" src="' +
|
||||
expectedImage +
|
||||
'">' +
|
||||
'<div class="screen-diff__image-over">' +
|
||||
'<img class="screen-diff__image" src="' +
|
||||
actualImage +
|
||||
'">' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
if (actualImage) {
|
||||
return renderImage(actualImage);
|
||||
}
|
||||
return 'No diff data provided';
|
||||
}
|
||||
|
||||
var TestResultView = Backbone.Marionette.View.extend({
|
||||
regions: {
|
||||
subView: '.screen-diff-view',
|
||||
},
|
||||
template: function () {
|
||||
return '<div class="screen-diff-view"></div>';
|
||||
},
|
||||
onRender: function () {
|
||||
var data = this.model.toJSON();
|
||||
var testType = data.labels.filter(function (label) {
|
||||
return label.name === 'testType';
|
||||
})[0];
|
||||
var diffImage = findImage(data, 'diff');
|
||||
var actualImage = findImage(data, 'actual');
|
||||
var expectedImage = findImage(data, 'expected');
|
||||
if (!testType || testType.value !== 'screenshotDiff') {
|
||||
return;
|
||||
}
|
||||
this.showChildView(
|
||||
'subView',
|
||||
new ScreenDiffView({
|
||||
diffImage: diffImage,
|
||||
actualImage: actualImage,
|
||||
expectedImage: expectedImage,
|
||||
}),
|
||||
);
|
||||
},
|
||||
});
|
||||
var ErrorView = Backbone.Marionette.View.extend({
|
||||
templateContext: function () {
|
||||
return this.options;
|
||||
},
|
||||
template: function (data) {
|
||||
return '<pre class="screen-diff-error">' + data.error + '</pre>';
|
||||
},
|
||||
});
|
||||
var AttachmentView = Backbone.Marionette.View.extend({
|
||||
regions: {
|
||||
subView: '.screen-diff-view',
|
||||
},
|
||||
template: function () {
|
||||
return '<div class="screen-diff-view"></div>';
|
||||
},
|
||||
onRender: function () {
|
||||
jQuery
|
||||
.getJSON(this.options.sourceUrl)
|
||||
.then(this.renderScreenDiffView.bind(this), this.renderErrorView.bind(this));
|
||||
},
|
||||
renderErrorView: function (error) {
|
||||
console.log(error);
|
||||
this.showChildView(
|
||||
'subView',
|
||||
new ErrorView({
|
||||
error: error.statusText,
|
||||
}),
|
||||
);
|
||||
},
|
||||
renderScreenDiffView: function (data) {
|
||||
this.showChildView(
|
||||
'subView',
|
||||
new ScreenDiffView({
|
||||
diffImage: data.diff,
|
||||
actualImage: data.actual,
|
||||
expectedImage: data.expected,
|
||||
}),
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
var ScreenDiffView = Backbone.Marionette.View.extend({
|
||||
className: 'pane__section',
|
||||
events: function () {
|
||||
return {
|
||||
['click [name="screen-diff-type-' + this.cid + '"]']: 'onDiffTypeChange',
|
||||
'mousemove .screen-diff__overlay': 'onOverlayMove',
|
||||
};
|
||||
},
|
||||
initialize: function (options) {
|
||||
this.diffImage = options.diffImage;
|
||||
this.actualImage = options.actualImage;
|
||||
this.expectedImage = options.expectedImage;
|
||||
this.radioName = 'screen-diff-type-' + this.cid;
|
||||
},
|
||||
templateContext: function () {
|
||||
return {
|
||||
diffType: settings.get('diffType'),
|
||||
diffImage: this.diffImage,
|
||||
actualImage: this.actualImage,
|
||||
expectedImage: this.expectedImage,
|
||||
radioName: this.radioName,
|
||||
};
|
||||
},
|
||||
template: function (data) {
|
||||
if (!data.diffImage && !data.actualImage && !data.expectedImage) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return (
|
||||
'<h3 class="pane__section-title">Screen Diff</h3>' +
|
||||
'<div class="screen-diff__content">' +
|
||||
'<div class="screen-diff__switchers">' +
|
||||
'<label><input type="radio" name="' +
|
||||
data.radioName +
|
||||
'" value="diff"> Show diff</label>' +
|
||||
'<label><input type="radio" name="' +
|
||||
data.radioName +
|
||||
'" value="overlay"> Show overlay</label>' +
|
||||
'</div>' +
|
||||
renderDiffContent(
|
||||
data.diffType,
|
||||
data.diffImage,
|
||||
data.actualImage,
|
||||
data.expectedImage,
|
||||
) +
|
||||
'</div>'
|
||||
);
|
||||
},
|
||||
adjustImageSize: function (event) {
|
||||
var overImage = this.$(event.target);
|
||||
overImage.width(overImage.width());
|
||||
},
|
||||
onRender: function () {
|
||||
const diffType = settings.get('diffType');
|
||||
this.$('[name="' + this.radioName + '"][value="' + diffType + '"]').prop(
|
||||
'checked',
|
||||
true,
|
||||
);
|
||||
if (diffType === 'overlay') {
|
||||
this.$('.screen-diff__image-over img').on('load', this.adjustImageSize.bind(this));
|
||||
}
|
||||
},
|
||||
onOverlayMove: function (event) {
|
||||
var pageX = event.pageX;
|
||||
var containerScroll = this.$('.screen-diff__container').scrollLeft();
|
||||
var elementX = event.currentTarget.getBoundingClientRect().left;
|
||||
var delta = pageX - elementX + containerScroll;
|
||||
this.$('.screen-diff__image-over').width(delta);
|
||||
},
|
||||
onDiffTypeChange: function (event) {
|
||||
settings.save('diffType', event.target.value);
|
||||
this.render();
|
||||
},
|
||||
});
|
||||
allure.api.addTestResultBlock(TestResultView, { position: 'before' });
|
||||
allure.api.addAttachmentViewer('application/vnd.allure.image.diff', {
|
||||
View: AttachmentView,
|
||||
icon: 'fa fa-exchange',
|
||||
});
|
||||
})();
|
|
@ -1,30 +0,0 @@
|
|||
.screen-diff__switchers {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.screen-diff__switchers label + label {
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
.screen-diff__overlay {
|
||||
position: relative;
|
||||
cursor: col-resize;
|
||||
}
|
||||
|
||||
.screen-diff__container {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.screen-diff__image-over {
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
box-shadow: 2px 0 1px -1px #aaa;
|
||||
}
|
||||
|
||||
.screen-diff-error {
|
||||
color: #fd5a3e;
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
{"total":1,"items":[{"uid":"5cf9d6ae0ea676f1f3973247f26c598f","name":"登录用例合集","statistic":{"failed":3,"broken":0,"skipped":0,"passed":1,"unknown":0,"total":4}}]}
|
|
@ -1 +0,0 @@
|
|||
[{"data":{"Product defects":3}}]
|
|
@ -1 +0,0 @@
|
|||
{"total":1,"items":[{"uid":"8fb3a91ba5aaf9de24cc8a92edc82b5d","name":"Product defects","statistic":{"failed":3,"broken":0,"skipped":0,"passed":0,"unknown":0,"total":3}}]}
|
|
@ -1 +0,0 @@
|
|||
[{"data":{"duration":115956}}]
|
|
@ -1 +0,0 @@
|
|||
[{"uid":"18feb626809ab3f0","name":"代客下单-后台代客下单到H5","time":{"start":1711769007680,"stop":1711769026189,"duration":18509},"status":"passed","severity":"normal"},{"uid":"76f2c2bc9dc3a14f","name":"登录-H5用户名密码登录","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"status":"failed","severity":"normal"},{"uid":"9eaf38b3a1c900ec","name":"代客下单-后台代客下单到pc","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"status":"failed","severity":"normal"},{"uid":"3a44948921b0187b","name":"登录-PC端登录","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"status":"failed","severity":"normal"}]
|
|
@ -1 +0,0 @@
|
|||
[]
|
|
@ -1 +0,0 @@
|
|||
[]
|
|
@ -1 +0,0 @@
|
|||
[{"data":{"failed":3,"broken":0,"skipped":0,"passed":1,"unknown":0,"total":4}}]
|
|
@ -1 +0,0 @@
|
|||
[]
|
|
@ -1 +0,0 @@
|
|||
[{"data":{"run":4,"retry":0}}]
|
|
@ -1 +0,0 @@
|
|||
[{"uid":"76f2c2bc9dc3a14f","name":"登录-H5用户名密码登录","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"status":"failed","severity":"normal"},{"uid":"9eaf38b3a1c900ec","name":"代客下单-后台代客下单到pc","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"status":"failed","severity":"normal"},{"uid":"18feb626809ab3f0","name":"代客下单-后台代客下单到H5","time":{"start":1711769007680,"stop":1711769026189,"duration":18509},"status":"passed","severity":"normal"},{"uid":"3a44948921b0187b","name":"登录-PC端登录","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"status":"failed","severity":"normal"}]
|
|
@ -1 +0,0 @@
|
|||
[{"uid":"18feb626809ab3f0","name":"代客下单-后台代客下单到H5","time":{"start":1711769007680,"stop":1711769026189,"duration":18509},"status":"passed","severity":"normal"},{"uid":"76f2c2bc9dc3a14f","name":"登录-H5用户名密码登录","time":{"start":1711768910233,"stop":1711768979422,"duration":69189},"status":"failed","severity":"normal"},{"uid":"9eaf38b3a1c900ec","name":"代客下单-后台代客下单到pc","time":{"start":1711768989222,"stop":1711769006513,"duration":17291},"status":"failed","severity":"normal"},{"uid":"3a44948921b0187b","name":"登录-PC端登录","time":{"start":1711768980639,"stop":1711768987983,"duration":7344},"status":"failed","severity":"normal"}]
|
|
@ -1 +0,0 @@
|
|||
{"total":1,"items":[{"uid":"5ff32718bb0156572a7d88f67a692e02","name":"TestCase.TestCheck.Test_pp","statistic":{"failed":3,"broken":0,"skipped":0,"passed":1,"unknown":0,"total":4}}]}
|
|
@ -1 +0,0 @@
|
|||
{"reportName":"Allure Report","testRuns":[],"statistic":{"failed":3,"broken":0,"skipped":0,"passed":1,"unknown":0,"total":4},"time":{"start":1711768910233,"stop":1711769026189,"duration":115956,"minDuration":7344,"maxDuration":69189,"sumDuration":112333}}
|
After Width: | Height: | Size: 105 KiB |