栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录

前言一、为什么学seleniumbase?二、seleniumbase是什么?三、框架优点:四、常用语法格式

1、直接继承baseCase示例:pytest test_demo_site.py2、子类继承baseCase:3、不在类中使用 pytest 的夹具 fixture4、不带有 pytest 夹具类的用法5、带有 pytest 夹具类的语法6、使用夹具获取夹具(无类)request夹具获取sb夹具7、使用夹具获取夹具(有类)request夹具获取sb夹具8、中文版 seleniumbase


前言

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


一、为什么学seleniumbase?

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

二、seleniumbase是什么?
    简称sbase,是Web 和移动 E2E UI 测试的完整测试自动化框架,推荐理由:github2.5k的pytest+unittest+selenium的成熟框架。在核心,Seleniumbase的工作原理是将pytest扩展为直接插件,Seleniumbase会自动启动Web浏览器进行测试(使用SeleniumWebDriver),然后通过baseCase类向这些测试提供对Seleniumbase库的访问权限。测试还可以访问Seleniumbase命令行参数和Seleniumbase方法,它们提供了额外的功能。我们主要是用已经封装好的 seleniumbase的方法、命令行参数,简化了代码,非常方便,主要用于迭代开发中的快速回归测试、包括各浏览器兼容性测试中文文档:https://seleniumbase.io/help_docs/chinese/github地址:https://github.com/seleniumbase/Seleniumbase
三、框架优点:
    简化代码pytest配置文件已自动添加隐形等待,无须再添加"time.sleep()"MasterQA的解决方案,自动化结合手动测试失败时,日志、截图的保存及转移测试报告

四、常用语法格式 1、直接继承baseCase示例:pytest test_demo_site.py
from seleniumbase import baseCase


class DemoSiteTests(baseCase):
    def test_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


class baseTestCase(baseCase):
    def setUp(self):
        super(baseTestCase, self).setUp()
        # <<< 在 super().setUp() 之后运行自定义 setUp() 代码进行测试 >>>

    def tearDown(self):
        self.save_teardown_screenshot()
        if self.has_exception():
            # <<< 如果测试失败,则运行自定义代码。 >>>
            pass
        else:
            # <<< 如果测试通过,则运行自定义代码。 >>>
            pass
        # (将不可靠的tearDown() 代码包装在try/except 块中。)
        # <<< 在 super().tearDown() 之前运行自定义的 tearDown() 代码 >>>
        super(baseTestCase, self).tearDown()

    def login(self):
        # <<< 占位符。 在此处添加您的代码。 >>>
        # 通过使用像这样的可重用方法来减少测试中的重复代码。
        # 如果用户界面发生变化,修复可以在一个地方应用。
        pass

    def example_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 class
def test_sb_fixture_with_no_class(sb):
    sb.open("https://google.com/ncr")
    sb.type('input[title="Search"]', "Seleniumbase GitHubn")
    sb.click('a[href*="github.com/seleniumbase/Seleniumbase"]')
    sb.click('a[title="seleniumbase"]')


# "sb" pytest fixture test in a method inside a class
class Test_SB_Fixture:
    def test_sb_fixture_inside_class(self, sb):
        sb.open("https://google.com/ncr")
        sb.type('input[title="Search"]', "Seleniumbase GitHubn")
        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 """


class LoginPage:
    def login_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"]')


class MyTests:
    def test_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

class LoginPage:
    def login_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"]')


class MyTests:
    def test_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)
def test_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)
class Test_Request_Fixture:
    def test_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)
def test_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)
class Test_Request_Fixture:
    def test_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 Test
from seleniumbase.translate.chinese import 硒测试用例  # noqa


class 我的测试类(硒测试用例):
    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="李连杰"]')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号