Рубрики
Без рубрики

17 синтаксических форматов селениумбазы

Есть более одного способа построить тест SeleniumBase. Узнайте их всех. Используйте только те, которые вам нужны. Помечено Python, автоматизация, тестирование.

17 форматов синтаксиса/рисунки дизайна

( смотреть это руководство на YouTube )

SeleniumBase Поддерживает 17 различных форматов синтаксиса (шаблоны дизайна) для структурирующих испытаний. (Первые 6 являются наиболее распространенными.)

1. Базовое прямое наследование

Этот формат используется большинством примеров в Папка SeleniumBase Примеры Отказ Это отличная отправная точка для любого обучения SeleniumBase, и это следует хорошими объектно-ориентированными принципами программирования. В этом формате BaseCase импортируется в верхней части файла Python, за которым следует класс Python, наследующий Базовый вариант . Затем любой метод испытаний, определенный в этом классе, автоматически получает доступ к методам селениумбазы, включая Настройка () и Обзор () Методы, которые автоматически вызывают для вращения и вращения веб-браузеров в начале и в конце методов испытаний. Вот пример этого:

from seleniumbase import BaseCase

class MyTestClass(BaseCase):
    def test_demo_site(self):
        self.open("https://seleniumbase.io/demo_page")
        self.type("#myTextInput", "This is Automated")
        self.click("#myButton")
        self.assert_element("tbody#tbodyId")
        self.assert_text("Automation Practice", "h3")
        self.click_link("SeleniumBase Demo Page")
        self.assert_exact_text("Demo Page", "h1")
        self.assert_no_js_errors()

(См. Примеры/test_demo_site.py для полного теста.)

2. Наследование подкласса BaseCase

Есть ситуации, когда вы можете настроить Настройка и Обзор ваших тестов. Может быть, вы хотите иметь все ваши тесты в систему в систему на определенный веб-сайт, или, возможно, вы хотите, чтобы ваши тесты были результаты отчета о результатах в зависимости от вызова API в зависимости от того, прошел ли тест или сбой. Это можно сделать, создавая подкласс Базовый вариант а затем тщательно создавать пользовательские Настройка () и Обзор () Методы, которые не перезаписывают критические функциональные возможности селениумбазной базы по умолчанию Настройка () и Обзор () методы. После этого ваши тестовые классы наследуют подкласс BaseCase С добавленной функциональностью, а не напрямую наследовать BaseCase сам. Вот пример этого:

from seleniumbase import BaseCase

class BaseTestCase(BaseCase):
    def setUp(self):
        super(BaseTestCase, self).setUp()
        # <<< Run custom setUp() code for tests AFTER the super().setUp() >>>

    def tearDown(self):
        self.save_teardown_screenshot()
        if self.has_exception():
            # <<< Run custom code if the test failed. >>>
            pass
        else:
            # <<< Run custom code if the test passed. >>>
            pass
        # (Wrap unreliable tearDown() code in a try/except block.)
        # <<< Run custom tearDown() code BEFORE the super().tearDown() >>>
        super(BaseTestCase, self).tearDown()

    def login(self):
        # <<< Placeholder. Add your code here. >>>
        # Reduce duplicate code in tests by having reusable methods like this.
        # If the UI changes, the fix can be applied in one place.
        pass

    def example_method(self):
        # <<< Placeholder. Add your code here. >>>
        pass

class MyTests(BaseTestCase):
    def test_example(self):
        self.login()
        self.example_method()
        self.type("input", "Name")
        self.click("form button")
        ...

(См. Примеры/котельные/base_test_case.py для получения дополнительной информации.)

3. SB Petest Baskture (без класса)

Pytest Framework поставляется с уникальной системой, называемыми приборами, которые заменяет отчетности импорта в верхней части файлов Python, импортируя библиотеки непосредственно в определения теста. Больше, чем просто в том, чтобы быть импортным, причем Ptyest также может автоматически звонить предопределенным Настройка () и Обзор () Методы в начале и конце тестовых методов. Работать, SB Добавляют в качестве аргумента для каждого определения метода теста, который нуждается в функциональности селениумбазы. Это означает, что вам больше не нуждаются в импортных операторах в ваших файлах Python для использования SeleniumBase. При использовании других приспособлений Ptyest в ваших тестах, возможно, вам может потребоваться использовать крепеж SELENIAMBASE (вместо BaseCase Наследование класса) для соображений совместимости. Вот пример SB Смель в тесте, который не использует классы Python:

def test_sb_fixture_with_no_class(sb):
    sb.open("https://google.com/ncr")
    sb.type(, 'SeleniumBase\n')
    sb.click()
    sb.click()

(См. Вершина Примеры/test_sb_fixture.py для теста.)

4. SB Petest Baskture (в классе)

SB Приспособление Pteest также можно использовать внутри класса. Существует небольшое изменение в синтаксисе, потому что это означает, что методы испытаний также должны включать Я В их определениях аргументов, когда определяются методы испытаний. (A Self Аргумент представляет объект класса и используется в каждом методе теста, который живет внутри класса.) Еще раз, в файлах Python не требуется никаких операторов импорта в файлах Python. Вот пример использования SB Смель в методе теста, который живет внутри класса Python:

class Test_SB_Fixture:
    def test_sb_fixture_inside_class(self, sb):
        sb.open("https://google.com/ncr")
        sb.type(, 'SeleniumBase\n')
        sb.click()
        sb.click()

(См. Нижняя часть Примеры/test_sb_fixture.py для теста.)

5. Классическая модель объекта страницы с базовой наследованием

С SeleniumBase вы можете использовать объекты страницы, чтобы вырвать код из тестов, но помните, Я переменная (от методов испытаний, которые наследуют BaseCase ) содержит драйвер и все другие переменные переменные определения. Поэтому, что Я Необходимо пропущено как ARG в любой метод внешнего класса, чтобы позвонить методам селенбазы. В приведенном ниже примере Я Переменная от метода испытаний передается в SB ARG метода класса объекта страницы, потому что Я Arg из метода класса объекта страницы уже используется для собственного класса. Каждый определение метода класса Python должно включать в себя Я как первый аргумент.

from seleniumbase import BaseCase

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()

class MyTests(BaseCase):
    def test_swag_labs_login(self):
        LoginPage().login_to_swag_labs(self, "standard_user")
        self.assert_element("#inventory_container")
        self.assert_element('div:contains("Sauce Labs Backpack")')

(См. Примеры/котельные/образцы/образцы/swag_labs_test.py . для полного теста.)

6. Классическая модель объекта страницы с приспособлением SB Pteest

Это похоже на классическую модель объекта страницы с BaseCase Наследование, за исключением того, что на этот раз мы проходим SB Petest Baskture от теста в SB Arg из метода класса объекта страницы (вместо того, чтобы пройти self ). Теперь, когда вы используете SB Как приспособление для Ptyest, вам больше не нужно импортировать Базовый вариант В любом месте в вашем коде. Смотрите пример ниже:

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()

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")')

(См. Примеры/котельные/образцы/SB_swag_test.py для полного теста.)

7. Использование крепежа запроса, чтобы получить крепеж SB (без класса)

Pтойцы Запрос Приспособление может быть использовано для получения других приспособлений Ptyest из в тестах, таких как SB приспособление. Это позволяет вам иметь больше контроля, когда приспособления инициализируются, поскольку приспособление больше не нужно загружаться в самом начале методов испытаний. Это делается, позвонив request.getfixturevalue ('sb') от теста. Вот пример использования Pтойца Запрос Приспособление для загрузки SB Приспособление в методе теста, который не использует классы Python:

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()

(См. Вершина Примеры/test_request_sb_fixture.py для теста.)

8. Использование крепежа запроса, чтобы получить SB-прибор (в классе)

Pтойцы Запрос Крепеж также можно использовать для получения SB Смесь изнутри класса Python. Вот пример этого:

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()

(См. Нижняя часть Примеры/test_request_sb_fixture.py для теста.)

9. Селенбаза на китайском языке

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на китайский. Вот пример этого:

from seleniumbase.translate.chinese import 硒测试用例

class 我的测试类(硒测试用例):
    def test_例子1(self):
        self.开启("https://zh.wikipedia.org/wiki/")
        self.断言标题("维基百科,自由的百科全书")
        self.断言元素()
        self.断言文本("新闻动态", "span#新闻动态")
        self.输入文本("#searchInput", "舞龍")
        self.单击("#searchButton")
        self.断言文本("舞龍", "#firstHeading")
        self.断言元素()
        self.输入文本("#searchInput", "火鍋")
        self.单击("#searchButton")
        self.断言文本("火鍋", "#firstHeading")
        self.断言元素('td:contains("火鍋的各種食材")')
        self.输入文本("#searchInput", "精武英雄")
        self.单击("#searchButton")
        self.断言元素()
        self.断言文本("李连杰", 'li a[title="李连杰"]')

(См. Примеры/переводы/Chinese_test_1.py для китайского теста.)

10. Селенбаза в голландском

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на голландские. Вот пример этого:

from seleniumbase.translate.dutch import Testgeval

class MijnTestklasse(Testgeval):
    def test_voorbeeld_1(self):
        self.openen("https://nl.wikipedia.org/wiki/Hoofdpagina")
        self.controleren_element()
        self.controleren_tekst("Welkom op Wikipedia", "td.hp-welkom")
        self.typ("#searchInput", "Stroopwafel")
        self.klik("#searchButton")
        self.controleren_tekst("Stroopwafel", "#firstHeading")
        self.controleren_element()
        self.typ("#searchInput", "Rijksmuseum Amsterdam")
        self.klik("#searchButton")
        self.controleren_tekst("Rijksmuseum", "#firstHeading")
        self.controleren_element()
        self.terug()
        self.controleren_ware("Stroopwafel" in self.huidige_url_ophalen())
        self.vooruit()
        self.controleren_ware("Rijksmuseum" in self.huidige_url_ophalen())

(См. Примеры/переводы/dutch_test_1.py для голландского теста.)

11. Селенбаза на французском языке

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на французский. Вот пример этого:

from seleniumbase.translate.french import CasDeBase

class MaClasseDeTest(CasDeBase):
    def test_exemple_1(self):
        self.ouvrir("https://fr.wikipedia.org/wiki/")
        self.vérifier_texte("Wikipédia")
        self.vérifier_élément()
        self.taper("#searchInput", "Crème brûlée")
        self.cliquer("#searchButton")
        self.vérifier_texte("Crème brûlée", "#firstHeading")
        self.vérifier_élément()
        self.taper("#searchInput", "Jardin des Tuileries")
        self.cliquer("#searchButton")
        self.vérifier_texte("Jardin des Tuileries", "#firstHeading")
        self.vérifier_élément()
        self.retour()
        self.vérifier_vrai("brûlée" in self.obtenir_url_actuelle())
        self.en_avant()
        self.vérifier_vrai("Jardin" in self.obtenir_url_actuelle())

(См. Примеры/переводы/frension_test_1.py для французского теста.)

12. Селенбаза на итальянском языке

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на итальянский. Вот пример этого:

from seleniumbase.translate.italian import CasoDiProva

class MiaClasseDiTest(CasoDiProva):
    def test_esempio_1(self):
        self.apri("https://it.wikipedia.org/wiki/")
        self.verificare_testo("Wikipedia")
        self.verificare_elemento()
        self.digitare("#searchInput", "Pizza")
        self.fare_clic("#searchButton")
        self.verificare_testo("Pizza", "#firstHeading")
        self.verificare_elemento()
        self.digitare("#searchInput", "Colosseo")
        self.fare_clic("#searchButton")
        self.verificare_testo("Colosseo", "#firstHeading")
        self.verificare_elemento()
        self.indietro()
        self.verificare_vero("Pizza" in self.ottenere_url_corrente())
        self.avanti()
        self.verificare_vero("Colosseo" in self.ottenere_url_corrente())

(См. Примеры/переводы/Italian_test_1.py для итальянского теста.)

13. Селенбаза в японском языке

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на японский. Вот пример этого:

from seleniumbase.translate.japanese import セレニウムテストケース

class 私のテストクラス(セレニウムテストケース):
    def test_例1(self):
        self.を開く("https://ja.wikipedia.org/wiki/")
        self.テキストを確認する("ウィキペディア")
        self.要素を確認する()
        self.入力("#searchInput", "アニメ")
        self.クリックして("#searchButton")
        self.テキストを確認する("アニメ", "#firstHeading")
        self.入力("#searchInput", "寿司")
        self.クリックして("#searchButton")
        self.テキストを確認する("寿司", "#firstHeading")
        self.要素を確認する()
        self.入力("#searchInput", "レゴランド・ジャパン")
        self.クリックして("#searchButton")
        self.要素を確認する()
        self.リンクテキストを確認する("名古屋城")
        self.リンクテキストをクリックします("テーマパーク")
        self.テキストを確認する("テーマパーク", "#firstHeading")

(См. Примеры/переводы/Японии_test_1.py для японского теста.)

14. Селенбаза в корее

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на корейский. Вот пример этого:

from seleniumbase.translate.korean import 셀레늄_테스트_케이스

class 테스트_클래스(셀레늄_테스트_케이스):
    def test_실시예_1(self):
        self.열기("https://ko.wikipedia.org/wiki/")
        self.텍스트_확인("위키백과")
        self.요소_확인()
        self.입력("#searchInput", "김치")
        self.클릭("#searchButton")
        self.텍스트_확인("김치", "#firstHeading")
        self.요소_확인()
        self.링크_텍스트_확인("한국 요리")
        self.입력("#searchInput", "비빔밥")
        self.클릭("#searchButton")
        self.텍스트_확인("비빔밥", "#firstHeading")
        self.요소_확인()
        self.링크_텍스트를_클릭합니다("돌솥비빔밥")
        self.텍스트_확인("돌솥비빔밥", "#firstHeading")

(См. Примеры/переводы/korean_test_1.py для корейского теста.)

15. Селенбаза в португальском

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на португальский. Вот пример этого:

from seleniumbase.translate.portuguese import CasoDeTeste

class MinhaClasseDeTeste(CasoDeTeste):
    def test_exemplo_1(self):
        self.abrir("https://pt.wikipedia.org/wiki/")
        self.verificar_texto("Wikipédia")
        self.verificar_elemento()
        self.digitar("#searchInput", "João Pessoa")
        self.clique("#searchButton")
        self.verificar_texto("João Pessoa", "#firstHeading")
        self.verificar_elemento()
        self.digitar("#searchInput", "Florianópolis")
        self.clique("#searchButton")
        self.verificar_texto("Florianópolis", "h1#firstHeading")
        self.verificar_elemento()
        self.voltar()
        self.verificar_verdade("João" in self.obter_url_atual())
        self.digitar("#searchInput", "Teatro Amazonas")
        self.clique("#searchButton")
        self.verificar_texto("Teatro Amazonas", "#firstHeading")
        self.verificar_texto_do_link("Festival Amazonas de Ópera")

(См. Примеры/переводы/portuguese_test_1.py для португальского теста.)

16. Селенбаза на русском языке

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на русский язык. Вот пример этого:

from seleniumbase.translate.russian import ТестНаСелен

class МойТестовыйКласс(ТестНаСелен):
    def test_пример_1(self):
        self.открыть("https://ru.wikipedia.org/wiki/")
        self.подтвердить_элемент()
        self.подтвердить_текст("Википедия", "h2.main-wikimedia-header")
        self.введите("#searchInput", "МГУ")
        self.нажмите("#searchButton")
        self.подтвердить_текст("университет", "#firstHeading")
        self.подтвердить_элемент()
        self.введите("#searchInput", "приключения Шурика")
        self.нажмите("#searchButton")
        self.подтвердить_текст("Операция «Ы» и другие приключения Шурика")
        self.подтвердить_элемент()
        self.назад()
        self.подтвердить_правду("университет" in self.получить_текущий_URL())
        self.вперед()
        self.подтвердить_правду("Шурика" in self.получить_текущий_URL())

(См. Примеры/переводы/Russian_test_1.py для российского теста.)

17. Селенбаза по-испански

Этот формат похож на английскую версию с BaseCase Наследование, но есть другое оператор импорта, а имена методов были переведены на испанский. Вот пример этого:

from seleniumbase.translate.spanish import CasoDePrueba

class MiClaseDePrueba(CasoDePrueba):
    def test_ejemplo_1(self):
        self.abrir("https://es.wikipedia.org/wiki/")
        self.verificar_texto("Wikipedia")
        self.verificar_elemento()
        self.escriba("#searchInput", "Parc d'Atraccions Tibidabo")
        self.haga_clic("#searchButton")
        self.verificar_texto("Tibidabo", "#firstHeading")
        self.verificar_elemento()
        self.escriba("#searchInput", "Palma de Mallorca")
        self.haga_clic("#searchButton")
        self.verificar_texto("Palma de Mallorca", "#firstHeading")
        self.verificar_elemento()
        self.volver()
        self.verificar_verdad("Tibidabo" in self.obtener_url_actual())
        self.adelante()
        self.verificar_verdad("Mallorca" in self.obtener_url_actual())

(См. Примеры/переводы/spanish_test_1.py для испанского теста.)

Оригинал: “https://dev.to/seleniumbase/the-15-syntax-formats-of-seleniumbase-i1b”