• 0
  • 0
分享
  • ui自动化 SeleniumBase——软件测试圈
  • 恬恬圈 2022-02-17 12:02:30 字数 5609 阅读 1299 收藏 0

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


作者:RainBol

原文链接:https://www.cnblogs.com/RainBol/p/10906654.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1.5. 代码审计1.5.1. 简介代码审计是找到应用缺陷的过程。其通常有白盒、黑盒、灰盒等方式。白盒指通过对源代码的分析找到应用缺陷,黑盒通常不涉及到源代码,多使用模糊测试的方式,而灰盒则是黑白结合的方式。1.5.2. 常用概念1.5.2.1. 输入应用的输入,可以是请求的参数(GET、POST等)、上传的文件、网络、数据库等用户可控或者间接可控的地方。1.5.2.2. 处理函数处理数据的函数,可能是过滤,也可能是编解码。1.5.2.3. 危险函数又常叫做Sink Call、漏洞点,是可能触发危险行为如文件操作、命令执行、数据库操作等行为的函数。1.5.3. 自动化审计一般认为一个漏洞的触发...
            13 13 1348
            分享
          • 先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象、好理解拿来用用。可以把WebDriver驱动浏览器类比成出租车司机开出租车。类比在开出租车时有三个角色:乘客:他/她告诉出租车司机去哪里,大概怎么走 出租车司机:他按照乘客的要求来操控出租车 出租车:出租车按照司机的操控完成真正的行驶,把乘客送到目的地在WebDriver中也有类似的三个角色:自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动) 浏览器驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器 浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。所以在...
            0 0 1239
            分享
          •   看看我写的软件测试面试时候的这些坑,你一定不能踩!!!  第一个坑--测试用例编写没有思路,想起一条写一条。  分析:  该题目一般检查候选人编写测试用例的思路、覆盖度、深度。如果想起一条写一条,可能说明用例编写经验不足。  避免雷区:  一般有经验的候选人,都会按照自己常用的结构来划分功能点、影响因素。  1. 按照常用结构划分:  比如:分别从功能性、界面ui、易用性、安全性、兼容性等方面来考虑测试用例。  2. 字迹清晰,条理分明。  第二个坑--自顾自答(回答跑题了)  面试官:“同学,请讲一下你在近期项目中做的事情吧?”  候选人:“我最近做的项目是xxx,是一款在线购物平台,主...
            0 0 991
            分享
          •   Pytest简介  Pytest is a mature full-featured Python testing tool that helps you write better programs.The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries.  通过官方网站介绍我们可以了解到,pytest是一个非常成熟的全功能的python测试框架,主要有以...
            0 0 1253
            分享
          • 入门自动化测试必读自动化测试概念自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。好处自动化测试可以替代大量的手工机械重复性操作,测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上;自动化测试可以大幅提升回归测试的效率;自动化测试适合在非工作时间执行测试,工作时间分析失败用例;自动化测试可以高效地实现某些手工测试无法完成或者代价巨大的测试类型,比如关键业务 7×24...
            0 0 1214
            分享
      • 51testing软件测试圈微信