当前位置:   article > 正文

Selenium篇实战--结合接口测试和图形界面测试_selenium可以测试页面的样子吗

selenium可以测试页面的样子吗

场景3_新建一个job.py

#####################################

  1. # -*- coding: gbk -*-
  2. from operations import Operations
  3. from log import logger
  4. from browser import Browser
  5. from domain.jenkins import Jenkins
  6. logger.info("测试场景3开始:创建一个job")
  7. browser = Operations(Browser.start_chrome())
  8. logger.info("测试前置条件:预先删除原有的同名job,job名字={job_name}")
  9. # 准备一个Jenkins类的实例,用来做测试的各种准备工作
  10. admin = Jenkins()
  11. job_name = "场景3测试job"
  12. # 不管job存在不存在,总之删一下试试,如果存在则删除掉,不存在则忽略
  13. admin.delete_job(job_name)
  14. # 快捷登陆
  15. admin.login_jenkins(browser)
  16. # 真正要测的场景开始
  17. # 点击左侧新建item的链接来创建一个jenkins job
  18. browser.click("css:a[href='/view/all/newJob']")
  19. # 输入job名称
  20. browser.input("id:name", job_name)
  21. # 选择job类型
  22. browser.click("css:li[class='hudson_model_FreeStyleProject']")
  23. # 点击确定按钮
  24. browser.click("id:ok-button")
  25. # 点击保存按钮
  26. browser.click("xpath://button[text()='保存']")
  27. # 真正要测的场景完毕
  28. #验证job是否创建成功
  29. assert admin.check_if_job_existed(job_name),f"创建失败:job名称={job_name}"
  30. # 关闭浏览器
  31. browser.close()
  32. logger.info("测试场景3结束")

运行结果,屏幕显示以下内容:

  1. [2021-12-01 13:45:21.141879]测试场景3开始:创建一个job
  2. [2021-12-01 13:45:21.141879]启动Chrome浏览器
  3. [2021-12-01 13:45:22.368721]测试前置条件:预先删除原有的同名job,job名字={job_name}
  4. [2021-12-01 13:45:22.590128]job=场景3测试job已删除
  5. [2021-12-01 13:45:22.590128]浏览器打开url=http://localhost:8080/
  6. [2021-12-01 13:45:22.787905]开始检查cookie是否还有效:
  7. [2021-12-01 13:45:22.787905]启动Chrome浏览器headless模式
  8. [2021-12-01 13:45:23.734861]浏览器打开url=http://localhost:8080/
  9. [2021-12-01 13:45:23.998166]开始保存cookie到path=cookies.txt
  10. [2021-12-01 13:45:23.998166]增加cookis={'httpOnly': False, 'name': 'screenResolution', 'path': '/', 'secure': False, 'value': '800x600'}
  11. [2021-12-01 13:45:24.003202]增加cookis={'httpOnly': True, 'name': 'JSESSIONID.c1e2fbc7', 'path': '/', 'secure': False, 'value': 'node09x8lb1jyt3ez9l9d01jyqq7j42.node0'}
  12. [2021-12-01 13:45:24.005148]保存cookie完毕
  13. [2021-12-01 13:45:24.005148]浏览器打开url=http://localhost:8080/
  14. [2021-12-01 13:45:24.155321]开始获取元素的文本,元素=xpath://div[@class='login']
  15. [2021-12-01 13:45:24.155321]定位元素,使用定位语句=xpath://div[@class='login']
  16. [2021-12-01 13:45:24.181251]完毕获取,文本= admin | 注销
  17. [2021-12-01 13:45:24.186238]结果:cookie有效
  18. [2021-12-01 13:45:26.200825]开始保存cookie到path=cookies.txt
  19. [2021-12-01 13:45:26.200825]增加cookis={'httpOnly': False, 'name': 'screenResolution', 'path': '/', 'secure': False, 'value': '800x600'}
  20. [2021-12-01 13:45:26.204822]增加cookis={'httpOnly': True, 'name': 'JSESSIONID.c1e2fbc7', 'path': '/', 'secure': False, 'value': 'node09x8lb1jyt3ez9l9d01jyqq7j42.node0'}
  21. [2021-12-01 13:45:26.207807]保存cookie完毕
  22. [2021-12-01 13:45:26.207807]浏览器打开url=http://localhost:8080/
  23. [2021-12-01 13:45:26.325493]在元素='css:a[href='/view/all/newJob']'上执行鼠标点击
  24. [2021-12-01 13:45:26.325493]定位元素,使用定位语句=css:a[href='/view/all/newJob']
  25. [2021-12-01 13:45:26.469110]在元素='id:name'上输入文本=场景3测试job
  26. [2021-12-01 13:45:26.469110]定位元素,使用定位语句=id:name
  27. [2021-12-01 13:45:26.549892]在元素='css:li[class='hudson_model_FreeStyleProject']'上执行鼠标点击
  28. [2021-12-01 13:45:26.549892]定位元素,使用定位语句=css:li[class='hudson_model_FreeStyleProject']
  29. [2021-12-01 13:45:26.584799]在元素='id:ok-button'上执行鼠标点击
  30. [2021-12-01 13:45:26.584799]定位元素,使用定位语句=id:ok-button
  31. [2021-12-01 13:45:27.228078]在元素='xpath://button[text()='保存']'上执行鼠标点击
  32. [2021-12-01 13:45:27.228078]定位元素,使用定位语句=xpath://button[text()='保存']
  33. [2021-12-01 13:45:27.470430]job=场景3测试job存在,url=http://localhost:8080/job/%E5%9C%BA%E6%99%AF3%E6%B5%8B%E8%AF%95job/
  34. [2021-12-01 13:45:27.470430]浏览器关闭当前窗口或tab
  35. [2021-12-01 13:45:27.523288]测试场景3结束

解说:

1.首先为什么要完善?因为之前的写法重跑会失败。

这次的测试场景很简单,在jenkins上创建一个名为"场景3测试job"的job,然后保存。但是之前实战012里写的脚本只能跑一次,再跑就会失败,因为跑完一次之后,就会创建出这个job,再重跑就会失败。

2.怎样解决重跑失败?跑之前删除同名job。

3.怎样删除同名job?调用jenkins 的rest api来删。

我之前就说了,一个脚本测一个场景。我用selenium测创建job的场景,这是因为我要测的是通过jenkins的图形界面创建一个job。而删除同名job只是这个测试场景的准备工作,准备工作完全没必要通过图形界面来做。因此,我通过调用jenkins rest api来做准备工作。

4.跑完之后怎么验证job是否创建成功了?调用jenkins 的rest api来验证。

同样道理,这个场景的验证也不需要通过图形界面来验证。

5.关于class Jenkins这个类。

设计了delete_job这个用于删job的方法和check_if_job_existed这个检查job是否存在的业务方法。

然后实现了jenkins的登陆鉴权。jenkins的鉴权是标准的http basic auth基础鉴权加上防止CSRF攻击的crumber issuer安全验证。在这个类里,要删除job,就要通过rest api的方式发送符合这两个机制要求的请求,调用才能成功。

另外,还把之前的登陆浏览器的方法login_jenkins也移动到了这个类里,因此场景2也要做一点小修改。但我相信读者可以自己改好,此处不再赘述。

最后,请读者注意体会场景3中的api和图形界面操作混合调用的做法及其意义。正因为有了这种混合操作,我们才可以在单个脚本里聚焦于单个脚本的业务逻辑,我们才可以抛弃以前传统的页面对象模式。因为页面对象模式里定义的服务毫无意义,这些服务我们直接用rest接口实现即可。传统页面对象中,页面=服务+元素。而经过上面的解释,页面对象的服务封装毫无意义。同理,页面对象的元素封装也毫无意义。因为在我的脚本化思路下编写的脚本,并不需要重用元素。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/384306?site
推荐阅读
相关标签
  

闽ICP备14008679号