Skip to content

n0m44/CypressSoftAssert

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

CypressSoftAssert

Вся работа построена на promised-like методах cypress. Также код написан на typescript, при необходимости можно самостоятельно скомпилировать ts -> js через tsc.

Установка и правила использования:

  1. Загрузить soft-assert.ts себе в репозиторий
  2. Внутри теста импортировать класс SoftAssert из soft-assert.ts

import { SoftAssert } from "../../../support/SoftAssert";

  1. Создать экземпляр класса

let softAssert = new SoftAssert()

  1. Внутри before(...) добавить обработчики на события 'fail', 'test:before:run' с помощью метода .enableLog()

before( () => { softAssert.enableLog() })

  1. В конце it(...) обязательно вызывать softAssert.assertAll()

Методы:

  1. isExist(locator: string, msg: string, isExist: boolean = true) - проверка на существование элемента в DOM.
  2. isVisible(locator: string, isVisible: boolean, msg: string) - проверка на то, что элемент виден в понимании jquery в DOM. https://api.jquery.com/visible-selector/
  3. isCount(locator: string, count: number, msg: string) - проверка на то, что количество элементов в DOM === count p.s.: locator - может быть xpath / css selector, определяется по наличию знака / в начале локатора.

Использование в тесте:

it ('test1', () => {

  cy.visit('/')

  softAssert.isExist('div', '1. Try exist div by css') // pass

  softAssert.isVisible('//bodyup', true ,'2. Try visible bodyup by xpath') // fail
            
  softAssert.isExist('body', '3. Try exist body by css') // pass

  softAssert.isCount('//div[@class="Tab"]', 4, '4. Try count tabs by xpath') // fail

  softAssert.assertAll()
})

Output log, если тест упал на softAssert.assertAll():

image

Output log, если тест упал не из-за softAssert.assertAll():

image

Использование совместно с кастом логированием в overwrite методах:

Добавить свой интерфейс:

interface MyLog {
    message: string | undefined,
    soft: SoftAssert,
}

В commands.ts сделать overwrite нужного метода:

Cypress.Commands.overwrite('get', (origin, selector, options) => {
    
    if (options?.message === undefined) return origin(selector, options)
    
    Cypress.removeAllListeners('fail')
    Cypress.on('fail', (err, runnable) => {
        if (options?.soft != undefined){ 
            err = options.soft.getSoftAssertErrorInterface(err, options.message)
        }
        else{
            err.name += '. STEP: ' + options?.message
        }
        throw err
    })
    return origin(selector, options)
})

В command.ts в global.Cypress.Chainable:

get(selector: any, options?: Partial<globalThis.Cypress.Loggable & globalThis.Cypress.Timeoutable & globalThis.Cypress.Withinable & globalThis.Cypress.Shadow & MyLog> | undefined ): Chainable

В тесте вызывать:

cy.get('someElement', {soft: softAssert, message: 'Try get some element'})

Output log:

image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published