0


seleniumbase学习总结1 - 简介、原理、常见语法场景

文章目录


前言

初步认识seleniumbase,它解决了我快速开发UI自动化脚本的需求,留出更多的时间进行探索性测试。这个系列是基于落地+产品文档+issue+源码api解读最终形成的可以再次支撑快速落地的总结。


一、为什么学seleniumbase?

  想找一款基于pytest封装的UI自动化框架,github搜到这个2.6星,另外自己对slenium比较熟悉,就选了这款框架用来快速落地UI自动化脚本,并最终结合jenkins形成服务化。

二、seleniumbase是什么?

  1. 简称sbase,是Web 和移动 E2E UI 测试的完整测试自动化框架,推荐理由:github2.5k的pytest+unittest+selenium的成熟框架。
  2. 在核心,SeleniumBase的工作原理是将pytest扩展为直接插件,SeleniumBase会自动启动Web浏览器进行测试(使用SeleniumWebDriver),然后通过BaseCase类向这些测试提供对SeleniumBase库的访问权限。测试还可以访问SeleniumBase命令行参数和SeleniumBase方法,它们提供了额外的功能。
  3. 我们主要是用已经封装好的 seleniumbase的方法、命令行参数,简化了代码,非常方便,主要用于迭代开发中的快速回归测试、包括各浏览器兼容性测试
  4. 中文文档:https://seleniumbase.io/help_docs/chinese/
  5. github地址:https://github.com/seleniumbase/SeleniumBase

三、框架优点:

  1. 简化代码
  2. pytest配置文件
  3. 已自动添加隐形等待,无须再添加"time.sleep()"
  4. MasterQA的解决方案,自动化结合手动
  5. 测试失败时,日志、截图的保存及转移
  6. 测试报告在这里插入图片描述在这里插入图片描述

四、常用语法格式

1、直接继承BaseCase示例:pytest test_demo_site.py

from seleniumbase import BaseCase

classDemoSiteTests(BaseCase):deftest_demo_site(self):
        self.open("https://seleniumbase.io/demo_page")# Assert the title of the current web page
        self.assert_title("Web Testing Page")# Assert that the element is visible on the page
        self.assert_element("tbody#tbodyId")# Assert that the text appears within a given element
        self.assert_text("Demo Page","h1")

2、子类继承BaseCase:

cd examples/boilerplates
pytest base_test_case.py

from seleniumbase import BaseCase

classBaseTestCase(BaseCase):defsetUp(self):super(BaseTestCase, self).setUp()# <<< 在 super().setUp() 之后运行自定义 setUp() 代码进行测试 >>>deftearDown(self):
        self.save_teardown_screenshot()if self.has_exception():# <<< 如果测试失败,则运行自定义代码。 >>>passelse:# <<< 如果测试通过,则运行自定义代码。 >>>pass# (将不可靠的tearDown() 代码包装在try/except 块中。)# <<< 在 super().tearDown() 之前运行自定义的 tearDown() 代码 >>>super(BaseTestCase, self).tearDown()deflogin(self):# <<< 占位符。 在此处添加您的代码。 >>># 通过使用像这样的可重用方法来减少测试中的重复代码。# 如果用户界面发生变化,修复可以在一个地方应用。passdefexample_method(self):# <<< 占位符。 在此处添加您的代码。 >>>pass

3、不在类中使用 pytest 的夹具 fixture

pytest test_sb_fixture.py

# The pytest fixture (no class)sb:不再需要Python文件中的导入语句来使用SeleniumBase# "sb" pytest fixture test in a method with no classdeftest_sb_fixture_with_no_class(sb):
    sb.open("https://google.com/ncr")
    sb.type('input[title="Search"]',"SeleniumBase GitHub\n")
    sb.click('a[href*="github.com/seleniumbase/SeleniumBase"]')
    sb.click('a[title="seleniumbase"]')# "sb" pytest fixture test in a method inside a classclassTest_SB_Fixture:deftest_sb_fixture_inside_class(self, sb):
        sb.open("https://google.com/ncr")
        sb.type('input[title="Search"]',"SeleniumBase GitHub\n")
        sb.click('a[href*="github.com/seleniumbase/SeleniumBase"]')
        sb.click('a[title="examples"]')

4、不带有 pytest 夹具类的用法

examples/boilerplates/samples/swag_labs_test.py
pytest swag_labs_test.py

""" Classic Page Object Model with the "sb" fixture """classLoginPage:deflogin_to_swag_labs(self, sb, username):
        sb.open("https://www.saucedemo.com")
        sb.type("#user-name", username)
        sb.type("#password","secret_sauce")
        sb.click('input[type="submit"]')classMyTests:deftest_swag_labs_login(self, sb):
        LoginPage().login_to_swag_labs(sb,"standard_user")
        sb.assert_element("#inventory_container")
        sb.assert_element('div:contains("Sauce Labs Backpack")')

5、带有 pytest 夹具类的语法

examples/boilerplates/samples/sb_swag_test.py
pytest sb_swag_test.py

classLoginPage:deflogin_to_swag_labs(self, sb, username):
        sb.open("https://www.saucedemo.com")
        sb.type("#user-name", username)
        sb.type("#password","secret_sauce")
        sb.click('input[type="submit"]')classMyTests:deftest_swag_labs_login(self, sb):
        LoginPage().login_to_swag_labs(sb,"standard_user")
        sb.assert_element("#inventory_container")
        sb.assert_element('div:contains("Sauce Labs Backpack")')

6、使用夹具获取夹具(无类)request夹具获取sb夹具

pytest test_request_sb_fixture.py
pytest夹具可用于从测试中检索其他pytest夹具,例如夹具。这使您可以更好地控制夹具的初始化时间,因为夹具不再需要在测试方法的一开始就加载。这是通过从测试调用来完成的。

# Use the pytest "request" fixture to get the "sb" fixture (no class)deftest_request_sb_fixture(request):
    sb = request.getfixturevalue("sb")
    sb.open("https://seleniumbase.io/demo_page")
    sb.assert_text("SeleniumBase","#myForm h2")
    sb.assert_element("input#myTextInput")
    sb.type("#myTextarea","This is me")
    sb.click("#myButton")
    sb.tearDown()# Use the pytest "request" fixture to get the "sb" fixture (in class)classTest_Request_Fixture:deftest_request_sb_fixture_in_class(self, request):
        sb = request.getfixturevalue("sb")
        sb.open("https://seleniumbase.io/demo_page")
        sb.assert_element("input#myTextInput")
        sb.type("#myTextarea","Automated")
        sb.assert_text("This Text is Green","#pText")
        sb.click("#myButton")
        sb.assert_text("This Text is Purple","#pText")
        sb.tearDown()

7、使用夹具获取夹具(有类)request夹具获取sb夹具

pytest test_request_sb_fixture.py
pytest夹具可用于从测试中检索其他pytest夹具,例如夹具。这使您可以更好地控制夹具的初始化时间,因为夹具不再需要在测试方法的一开始就加载。这是通过从测试调用来完成的。

# Use the pytest "request" fixture to get the "sb" fixture (no class)deftest_request_sb_fixture(request):
    sb = request.getfixturevalue("sb")
    sb.open("https://seleniumbase.io/demo_page")
    sb.assert_text("SeleniumBase","#myForm h2")
    sb.assert_element("input#myTextInput")
    sb.type("#myTextarea","This is me")
    sb.click("#myButton")
    sb.tearDown()# Use the pytest "request" fixture to get the "sb" fixture (in class)classTest_Request_Fixture:deftest_request_sb_fixture_in_class(self, request):
        sb = request.getfixturevalue("sb")
        sb.open("https://seleniumbase.io/demo_page")
        sb.assert_element("input#myTextInput")
        sb.type("#myTextarea","Automated")
        sb.assert_text("This Text is Green","#pText")
        sb.click("#myButton")
        sb.assert_text("This Text is Purple","#pText")
        sb.tearDown()

8、中文版 seleniumbase

examples/translations/chinese_test_1.py
pytest chinese_test_1.py

# Chinese Language Testfrom seleniumbase.translate.chinese import 硒测试用例  # noqaclass 我的测试类(硒测试用例):def test_例子1(self):
        self.开启("https://zh.wikipedia.org/wiki/")
        self.断言标题("维基百科,自由的百科全书")
        self.断言元素('a[title="首页"]')
        self.断言文本("新闻动态","span#新闻动态")
        self.输入文本("#searchInput","舞龍")
        self.单击("#searchButton")
        self.断言文本("舞龍","#firstHeading")
        self.断言元素('img[src*="Chinese_draak.jpg"]')
        self.输入文本("#searchInput","麻婆豆腐")
        self.单击("#searchButton")
        self.断言文本("麻婆豆腐","#firstHeading")
        self.断言元素('div.thumb div:contains("一家中餐館的麻婆豆腐")')
        self.输入文本("#searchInput","精武英雄")
        self.单击("#searchButton")
        self.断言元素('img[src*="Fist_of_legend.jpg"]')
        self.断言文本("李连杰",'li a[title="李连杰"]')

本文转载自: https://blog.csdn.net/weixin_45451320/article/details/122931282
版权归原作者 阿_焦 所有, 如有侵权,请联系我们删除。

“seleniumbase学习总结1 - 简介、原理、常见语法场景”的评论:

还没有评论