Testy automatyczne Cypress przykładowe skrypty

Cypress IO

Loading

Testy automatyczne Cypress przykładowe skrypty to wpis pokazujący w jaki sposób rozszerzyć możliwości Cypressa. Jeżeli jesteś zainteresowany innymi wpisami dotyczącymi Cypressa, zapraszamy do odpowiedniego działu.

Wprowadzenie

Tworząc testy automatyczne z wykorzystaniem Cypressa może spotkać się z sytuacjami, że będziemy potrzebowali dodatkowego wsparcia by napisać nasze testy. W ramach tworzenia testów automatycznych, możecie mieć różne zagwozdki jak podejść do pewnych testów, albo jakie testy stworzyć. W ramach tego wpisu wskażemy Wam przykładowe testy które możecie zaimplementować w swoich projektach. Nie będą to najprostsze skrypty typu click, ale też nie będą to rozbudowane testy automatyczne. Czas na bardziej skomplikowane tematy – nadejdzie. 

Jako Ambasador Cypressa mam na celu rozpowszechnianie wiedzy o tym narzędziu, promowanie wartości jakie nam przyświecają.

Bad Linki

Przykładowy skrypt, który pozwala sprawdząć status linków na naszej stronie:

  it('Check bad link', () => {
  cy.get("a").each(page => {
    const link = page.prop('href')
    cy.request({
      url: link,
      failOnStatusCode: false  // check links and response
    }).then(response => {
      Cypress.log({
        name: link,
        message: response.status
      })
    })
    })

Kodowanie strony

Oto przykład skryptu gdzie weryfikujemy kodowanie strony.

    cy.document().should('have.property', 'charset').and('eq', 'UTF-8')

Sprawdzenie title stron

Przykładowy skrypt w którym sprawdzamy nazwę naszej strony

    cy.title().should('include', 'Page name')

Lokalizacja hosta

Oto przykład skryptu gdzie sprawdzamy lokalizację hosta

    expect(location.hostname).to.eq('www.example-page.com')

Full screenshot z blokadą elementów

Teraz przykład skryptu w którym robimy screenshot i blokujemy pewne elementy by nie pokazywały się przy dłuższej stronie.

    fullScreenshot() {
      cy.get(main.header).invoke('css', 'position', 'relative');
      cy.get(main.footer).scrollIntoView({ duration: 6000 })
      cy.screenshot({ capture: 'fullPage' });
        cy.get(main.header).invoke('css', 'position', 'fixed');

Zapisanie wartości do pliku

Oto przykład skryptu gdzie możemy zapisać wartość do pliku. 

    saveUrl() {
      cy.get(navigationUrl).click()
      cy.wait(main.shortWait)
      cy.url().then(url => {
          const saveLocation = `./cypress/Url/location.md`
          cy.writeFile(saveLocation, url)
        })

Sprawdzenie routingu 

Teraz czas na przykład skryptu, gdzie sprawdzamy routing. Możemy skorzystać do weryfikacji przy po kliknięciu w zakładkę news znajdujemy się na tej stronie. 

    checkRouting() {
        cy.url().should('include', '/yourPageAddress')

Dodawanie plików w inpucie

Tutaj dodajemy nowy plik np. do naszego inputu i sprawdzamy możliwość uploadu. 

    }
  addnewFile() {
      cy.xpath("/descendant::input[contains(@type, 'file')]") 
            .attachFile(yourFixturePath) 

Logowanie z wykorzystaniem enva

Jak masz konieczność logowania i dodajesz dane do plików env, możesz je wywoływać w metodach:

    }
  loginNewUserNotShowLoginAndPass() {
      cy.get(userNamePlace).click().type(Cypress.env('login')) 
        cy.get(passwordPlace).click().type(Cypress.env('password')) 

Otwieranie strony w tym samym oknie

Tutaj przykład skryptu gdzie mamy stronę która otwiera się w nowym oknie. My zaś z racji specyfiki Cypressa możemy wymusić otwarcie w tym samym oknie. Dodatkowo dodaliśmy od razu możliwość wpisania htaccessa. 

    }
  openInThisSameWindowNewPopup() {
      cy.xpath("/descendant::a[contains(@class, 'newPage')]").invoke('attr', 'href').then(($attr) => {
          cy.visit(`${$attr}`, {
              auth: {
                  username: Cypress.env('auth_username'),
                  password: Cypress.env('auth_password')
              }
          })
      })
      cy.contains('Text')
   

Klikanie w pętli

Jeżeli mamy konieczność przeklikania czegoś kilkukrotnie – możemy skorzystać z prostej pętli. 
 
  }
  loopForExample() {
      for (var i = 1; i < 7; i++) { // here You have loop set
          cy.get(elementToClick).click()

Najechanie na element

Najechanie myszką by wyzwolić pojawienie się np. wyskakującej wiadomości etc. 

 cy.get(myElement).trigger('mouseover')
 

Swipowanie

Tutaj przykład swipowania bez użycia dodatku real-events.
 
cy.get('.element-to-swipe').then(($el) => { 
cy.wrap($el).trigger('pointerdown', { clientX: 200, clientY: 200 });
cy.wrap($el).trigger('pointermove', { clientX: 100, clientY: 200 });
cy.wrap($el).trigger('pointerup', { clientX: 100, clientY: 200 });
});
cy.contains('Swiped left');
 

Sprawdzenie czy jest widoczny robot txt

Kolejny prosty a przydatny skrypt:
 
describe('Check for a robots.txt file', () => {
it('Should have a robots.txt file', () => {
cy.request('https://example.com/robots.txt').then((response) => {
expect(response.status).to.eq(200)
})
})
})
 

Sprawdzenie opisów alt obrazków

Jeżeli macie potrzebę sprawdzenie takich wartości (SEO), to warto skorzytać ze skryptu:
describe('Verify images have alt tags', () => {
it('Should not have any images without alt tags', () => {
cy.visit('https://example.com')
cy.get('img').should('have.attr', 'alt')
})
})
 

Podsumowanie. 

Artykuł Testy automatyczne Cypress przykładowe skryptyy – jest kolejnym krokiem dla Was by rozpocząć przygodę z tym narzędziem, Z racji popularyzacji narzędzia i dużego wsparcia które otrzymał Cypress na rozwój, będziemy poszerzać wpisy na ten temat. Wszelkie artykuły związane z Cypress IO znajdziecie w dedykowanym dziale.