ui自动化 SeleniumBase

news2024/10/7 20:36:42

目录

前言:

git克隆

校验邮件的案例:

注意事项:


前言:

SeleniumBase是一个基于Selenium WebDriver的Python框架,用于UI自动化测试。它具有简单易用的API接口,可轻松编写测试脚本以及管理测试用例。SeleniumBase不仅提供了WebDriver的常用操作,还提供了许多附加功能,例如自定义断言、数据驱动和截屏等。

SeleniumBase是一个自动化web测试框架,它的设计pyse相似,基于selenium和unittest封装的框架,api多,支持命令行多参数执行

文档地址:https://github.com/seleniumbase/SeleniumBase

下载

pip下载 

pip install seleniumbase

git克隆

git clone https://github.com/seleniumbase/SeleniumBase.git
cd SeleniumBase
pip install -r requirements.txt
python setup.py develop

升级

--upgrade

卸载

--force-reinstall  --no-cache-dir

驱动安装

seleniumbase install chromedriver
seleniumbase install geckodriver
seleniumbase install edgedriver
seleniumbase install iedriver
seleniumbase install operadriver

运行

pytest my_first_test.py --browser=chrome  #如果没有写明浏览器默认为chrome浏览器启动

官方文档案例

from seleniumbase import BaseCase
class MyTestClass(BaseCase):
    def test_basic(self):#必须以test开头
        # 打开网页,参数1:url,默认为chrome浏览器
        self.open("https://xkcd.com/353/")
        '''
             open()
                 其中有等待时间 
                     open方法中的设置setting.WAIT_FOR_RSC_ON_PAGE_LOADS=True 开启显式等待
                     wait_for_ready_state_complete方法中设置等待时间(长时间等待,默认为30s)  
        '''
        # 页面元素断言,参数1:元素定位代码, 参数2:by=By.CSS_SELECTOR,默认css_selector选择器
        # 参数3:timeout=settings.SMALL_TIMEOUT,默认为6s
        self.assert_element('img[alt="Python"]')
        '''
            settings.SMALL_TIMEOUT默认等待时间为6s
            wait_for_element_visible()中自动识别顺序,不填写默认css-->xpath( 判断开头是否为'/','./','(' )-->link( 判断开头是否为'link=','link_text=' )
        '''
        # 点击页面元素,参数1:selector元素定位代码, 参数2:by=By.CSS_SELECTOR,
        # 参数3:timeout = settings.SMALL_TIMEOUT
        self.click('a[rel="license"]')
        '''
            settings.SMALL_TIMEOUT默认等待时间为6s
            wait_for_element_visible()中自动识别顺序,不填写默认css-->xpath-->link
            内置纯js,jquery点击页面
            
        '''
        # 区域内的断言文本,参数1:text, 参数2:selector="html", 参数3:by=By.CSS_SELECTOR,
        # 参数4:timeout=settings.SMALL_TIMEOUT
        self.assert_text("free to copy", "div center")
        '''
            timeout=settings.SMALL_TIMEOUT默认等待时间那为6s
            wait_for_text_visible()的自动识别,不填写默认css-->xpath( 判断开头是否为'/','./','(' )-->link_text( 判断开头是否为'link=','link_text=' )
 
        '''
        self.open("https://xkcd.com/1481/")  # 打开另一个网页
        # 得到一个属性,参数1:selector, 参数2:attribute获取元素属性值, 参数3:by=By.CSS_SELECTOR,
        # 参数4:timeout=settings.SMALL_TIMEOUT
        title = self.get_attribute("#comic img", "title")
        '''
            timeout=settings.SMALL_TIMEOUT默认等待时间那为6s
            get_attribute()自动识别不填写默认css -->xpath-->link_text
            
        '''
        # 校验这个字符串是否在这个属性中
        self.assert_true("86,400 seconds per day" in title)
        # 点击链接标签中非属性字符串'Blag'
        self.click("link=Blag")
        # 校验字符串"The blag of the webcomic"是否是h2标签的非属性字符串
        self.assert_text("The blag of the webcomic", "h2")
        # 用一个新值更新html中指定元素的值
        self.update_text("input#s", "Robots!\n")
        self.assert_text("Hooray robots!", "#content")
        self.open("https://xkcd.com/1319/")
        # 该方法类似于assert_text(),但要求文本精确,参数1:text, 参数2:selector="html", 参数3:by=By.CSS_SELECTOR,
        # 参数4:timeout=settings.SMALL_TIMEOUT
        self.assert_exact_text("Automation", "#ctitle")

其他方法:   

self.go_back() #这个方法将浏览器导航到前面的页面。
self.go_forward() #这个方法在历史中导航浏览器前进。
self.refresh_page() #此方法将重新加载当前页面。
这个方法返回当前页面的URL。
get_page_source() #这个方法返回当前页面源。
get_text() #从页面上的元素获取文本
wait_for_element_present("div.my_class", timeout=10) #在数秒内断言某个元素在页面上的存在
wait_for_element_visible("a.my_class", timeout=5) #在数秒内断言页面上元素的可见性
find_element("a.my_class", timeout=5).click() #在java中可以直接使用.click()直接找到元素进行点击,同样这里也可以
在css选择器中如div[class="class_name"],可以使用div.class_name)简单化
is_element_visible(selector) #是页面上可见的元素
is_element_present(selector) #是页面上的一个元素
is_text_visible(text, selector) #是页面上可见的文本
switch_to_window() #该选项卡切换到new选项卡(切换到新建一个页面)
switch_to_frame()#进入iframe
switch_to_default_content() #进入别忘了退出iframe
测试时弹出警告框:
wait_for_and_accept_alert() #接收
wait_for_and_dismiss_alert() #拒绝
self.activate_jquery()#在尚未加载jquery的页面使用jquery
delayed_assert_element()和delayed_assert_text()将保存将引发的任何异常。要将所有失败的延迟断言清除到一个异常中,请确保在测试方法的末尾调用self.process_delayed_assert()。如果您的测试到达多个页面,您可以在单个页面的所有延迟断言的末尾调用self. process_delayed_()。通过这种方式,日志文件中的屏幕快照将具有生成延迟断言的位置。

校验邮件的案例:

假设您有一个发送电子邮件的测试,现在您想检查电子邮件是否已收到

View Code

使用jquery的案例

View Code

注意事项:

1、selenium iumbase自动处理常见的web驱动程序操作,比如在测试失败时启动web浏览器和保存屏幕截图,并且会保存latest_logs/文件夹中。如果在设置中将ARCHIVE_EXISTING_LOGS设置为True,那么这些日志将被移动到archived_logs/。,否则日志文件将在下一次测试运行开始时被清除。)

2、settings.py设置,setting中有许多配置,如

  • 选择要使用的测试浏览器(默认:Chrome)

  • 选择betweeen pytest &nose unittest runners

  • 选择是否进入调试模式失败选择额外变量进入测试

  • 选择浏览器的用户代理使用自动化改变速度(演示模式)

  • 选择多线程运行测试

  • 选择是否重试失败测试

  • 选择BrowserStack服务器上运行

  • 选择的Sauce Labs server上运行

  • 选择TestingBot服务器上运行

  • 选择CrossBrowserTesting服务器

  • 选择一个selenium Grid连接选择数据库保存结果

  • 选择一个代理服务器连接 等

3、 运行命令行案例

pytest my_first_test.py
pytest my_first_test.py --demo_mode --browser=chrome  
pytest my_first_test.py --browser=firefox
pytest test_suite.py --html=report.html
nosetests test_suite.py --report --show_report
pytest test_suite.py --headless -n 4
pytest test_suite.py --reruns 1 --reruns-delay 2
pytest test_suite.py --server=IP_ADDRESS --port=4444   
pytest proxy_test.py --proxy=IP_ADDRESS:PORT
pytest proxy_test.py --proxy=USERNAME:PASSWORD@IP_ADDRESS:PORT
pytest user_agent_test.py --agent="USER-AGENT STRING"
pytest test_fail.py --pdb -s
官方建议使用pytest

--demo_mode 演示模式

使脚本执行的过程变得很慢,而且还会让操作的元素高亮显示,方便你查看和定位问题,并且可以在settings.py中设置demo_sleep设置等待时间

或者:

pytest my_first_test.py --browser=chrome --demo_mode --demo_sleep=1.2
-n 4

开启4个线程为你工作,这个取决于你cpu的颗粒数

--reruns 5 --reruns-delay 1

重试测试失败的案例5次,并且在重试期间等待多少秒

--pdb -s

在调试Selenium脚本的时候,我们希望错误时可以暂停脚本  

当出现错误时,你可以继续输入命令:

“c”:继续

“s”:步骤

“n”下一步

--report  生成一个报告

--show_report  在测试套件完成后立即显示Nosetest报告。只在本地运行测试时使用——show_report,因为它会暂停测试运行

4、在jenkins可插件可实现自动化集成 Xvfb headless browser plugin

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=2szVdJcy6VnqVi_zYhQd8aI9U5yfUv34&authKey=leQfP2SBsSV1%2FUzpd2OtJhdk%2F0SH%2FzEdi8uCVyM4q8w%2FHQEA1WUh3aqS9kyXZxUH&noverify=0&group_code=574737577

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】HOT 100(10)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

5月总共面试31次,我人麻了....

3年测试经验原来什么都不是,只是给你的简历上画了一笔,一直觉得经验多,无论在哪都能找到满意的工作,但是现实却是给我打了一个大巴掌!事后也不会给糖的那种... 先说一下自己的个人情况,普通二本计算机专业…

华为OD机试真题 JavaScript 实现【寻找密码】【2023Q1 100分】,附详细解题思路

一、题目描述 小王在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下: 在一个密码本中,每一页都有一个由 26 个小写字母组成的若干位密码,从它的末尾开始依次去掉一位得到的新密码也在密码本…

母线保护(4)

4、母联死区保护 在各种母差保护中,存在一个共同的问题,就是死区问题。 如图,在母联合位时,当故障发生在母联断路器与母联CT之间时,故障电流由II母流向I母,I母小差有差流,判断为I母故障&#x…

yum安装nginx

Nginx介绍 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好&…

电脑提示由于找不到vcomp140.dll无法继续执行代码怎么修复呢?这个三个方法可以帮到你

在我们打开游戏或者获取软件的时候,点击电脑提示由于找不到vcomp140.dll无法继续执行代码需要怎么办呢?vcomp140.dll是什么呢?相信困扰着不少小伙伴,vcomp140.dll是Microsoft Visual C Redistributable中的一个动态链接库文件&…

牛客网Java面试题及答案整理(2023年秋招最新版,持续更新)

学习如逆水行舟,尤其是 IT 行业有着日新月异的节奏,我们更要抓紧每一次可以学习和进步的机会。所以,没有撤退可言。 即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装…

基于Java高校专业信息管理系统设计与实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

Spring Security--会话管理

就像登录qq一样,一个手机登录会将另外一个手机挤下线,这个就叫会话管理。 这个东西非常简单,在默认情况下可以登录n多次,一旦开启,就不允许登录多个。 什么是一个会话。 我们简单理解就是一个浏览器的同一个用户算一…

Redux 异步解决方案2. Redux-Saga中间件

利用Generator特性实现异步 因为Generator。结合yield yield操作符会获取右边表达示的值返回 可以用于异步变同步操作 中间件的特性: 以前的 action -> reducers -> store 现在的 action -> middleware -> reducers -> store 注意: reducer的type…

群晖云同步失败?一直卡在连接中怎么办?

群晖云同步是群晖NAS的一款基于网络的数据备份和同步服务,它可以帮助我们在不同设备之间轻松地同步文件、照片、文档等,并且支持自动化执行同步备份任务,让您的数据存储更加安全。 虽然群晖云同步能给我们带来很多便利,但是在…

yolov5 6.1 关于 tensorrt 加速的使用以及问题说明

文章目录 1. 参考连接2. 使用说明2.1 导出加速模型2.1 使用加速模型2.2 加速参数对比 3. 问题说明3.1 在 Tensorrt 8.4.1.5 版本上使用 export.py 导出失败的问题3.2 把模型文件由 best.pt 更换成加速后的 best.engine 后,执行推理时标注的类别名不正确的问题3.3 导…

面向教育机构的IT管理

多年来,高等教育见证了一些惊人的技术创新,包括远程学习、VR 和 AR 实验室、物联网等。随着技术席卷高等教育领域,机构有望高度依赖其技术基础设施,将学生的想法变为现实,以支持学习渠道并促进研究和合作。 另一方面&…

JMeter发送表单数据,响应体报错:参数校验异常

请求方式是post,请求参数就是表单形式。这个时候我们可以把请求参数写到参数里,也可以选择写到消息体数据里。 1、如果是写到参数中,那Content-Type默认就是表单格式,不需要格外添加HTTP信息头管理器。 2、如果是写到消息体数据中…

语音消息实现(聊天向)

语音消息实现记录下: SpringBootVue3客服项目,网页录制发送语音消息 Vue中使用js-audio-recorder插件实现录音功能并实现上传Blob数据到SpringBoot后台接口 2fps/recorder github地址 Recorder的API 语音测试地址 [Web] 4分钟搭建一个简洁好看的 We…

如何购买北京法拍房

1、对于有限购的法拍房来说,在没有购房者资格的前提下,请不要跟拍,就算是房子拍下来了,没办法过户的话,房子还不能算是你的,弃权则被罚保证金。2、对于没有限购的法拍房来说,在没有购房资格的前…

动态规划dp —— 24.最长湍流子数组

解释:数组中子数组中相邻数值一升一降称为湍流子数组 示例1: 1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 因为i位置是有两种情况:1.上升趋势 2.下降趋势 所以需要定义两种状态表示来把两种情况分开 f[i]表示&am…

抖音自动生成视频、字幕、自动上传发布

dy-auto ✨ 抖音自动生成视频、字幕、自动上传发布✨ 项目地址 点击进入https://github.com/Richard0403/dy-auto 录屏效果 https://github.com/Richard0403/dy-auto/assets/14147304/21400a42-9296-4956-9517-ced8d8bf4737 技术架构 名称功能ffmpeg处理视频的生成&…

Vue中如何进行Markdown文档展示与解析?

Vue中如何进行Markdown文档展示与解析? Markdown是一种轻量级的标记语言,可以在文本中使用简单的标记来表示格式和排版。在Vue项目中,Markdown文档的使用越来越普遍,因此在Vue中如何进行Markdown文档展示与解析也成为了一个热门话…

数据湖仓一体化架构:探究新一代数据处理的可能性

一、引言 随着大数据的快速发展,企业不断寻求高效、灵活和经济的方法来处理和管理海量数据。在这种背景下,数据湖和数据仓库这两种不同的架构模式各自展现出其独特的优势。而数据湖仓一体化架构,是对这两种模式优势的综合,为企业…