1.4.9 • Published 28 days ago

cypress-action v1.4.9

Weekly downloads
-
License
MIT
Repository
github
Last release
28 days ago

Cypress Action Command

cypress cypress xpath generate-datafaker fileUpload

generate-datafaker

generate-datafaker

Required

| NodeJs | Cypress version 10 >

This package provides a custom action command for Cypress, allowing you to perform various actions on DOM elements based on specific selectors and customization options.

Characteristics

  • Supports element selection via attributes, tags, CSS and XPath selectors.
  • Allows passing of Cypress options such as timeout.
  • Provides a personalized description for each action, improving the readability of test logs.

Installation

To install the package, run the following command in your Cypress project:

npm i cypress-action

Use Snippets in cy.action

action

action

actionIf

elseIf

test_bdd

test_action

test_bdd_BR

scenario

given

when

and

then

cenario

dado

quando

e

entao

Settings

cy.action automatically adds dependencies to the project in e2e.js file
import "cypress-plugin-steps";
require("cypress-action");
import "cypress-file-upload";
require("cypress-xpath");
export const faker = require("generate-datafaker");
import "cypress-wait-until";

Use

The cy.action command can be used in your Cypress tests as follows:

text in cy.action

in cy.action the text parameter is not mandatory, but using it will help indicate the action, and use the visuals of your test
// Example of using the `action` command
cy.action({ attr: "my-selector" }).click(); // Options passed as second argument

Parameters

  • attr: The element selector (string). It can be an attribute, tag, CSS or XPath selector.
  • text: A description of the action to be displayed in the logs.
  • options: Additional Cypress options, such as timeout.

Examples

cy.action({ attr: "my-selector" }, { timeout: 10000 }).click();

Selecting by Attribute

cy.action({
  attr: "data-test-id=botao-login",
  text: "Clicking the login button",
}).type();

Selecting by Tag

cy.action({
  attr: "<button>",
  text: "Interacting with buttons",
}).click();

Selecting by Xpath

cy.action({
  attr: '//*[@id="page-walker"]/form/fieldset[1]/div[2]/div/input',
  text: "Interacting with buttons",
}).select();

Selecting by fullXPath

cy.action({
  attr: "/html/body/div/div/button",
  text: "Selecting button via XPath",
}).type();
cy.action({ attr: "<form>", text: "action mapeando caminho" })
  .find(".field")
  .find('[placeholder="Nome completo"]')
  .clear()
  .type("Teste buscando por camadas usando tags");
// attachFile
cy.action({ attr: 'type="file"', text: "attachFile include" }).attachFile(
  "image.png"
);
// cssSelector
cy.action({
  attr: "#page-walker > form > fieldset:nth-child(3) > div:nth-child(2) > div > input[type=text]",
  text: "action por selector",
})
  .clear()
  .type("Teste com selector");
// action not text
cy.action({ attr: 'name="name"' }).clear().type("Teste sem texto de ação");
// attribute
cy.action({ attr: 'name="name"', text: "action por atributo" }).type(
  "Teste com atributo"
);
our
cy.action({ attr: 'placeholder="Nome completo"', text: "action por atributo" }).type(
  "Teste com atributo"
);

<input type="text" name="name" placeholder="Nome completo">
action({ attr: 'name="name"', text: "attr" })
  .clear()
  .type(faker.generateName());

action({
  attr: "#page-walker > form > fieldset:nth-child(3) > div:nth-child(2) > div > input[type=text]",
  text: "cssSelector",
})
  .clear()
  .type(faker.generateName());

action({
  attr: '//*[@id="page-walker"]/form/fieldset[1]/div[2]/div/input',
  text: "xpath",
})
  .clear()
  .type(faker.generateName());

action(
  {
    attr: "/html/body/div/div/form/fieldset[2]/div[4]/div[2]/input",
    text: "full xpath",
  },
  { timeout: 10000 }
)
  .clear()
  .type(faker.generateName());

cy.action whith maxAttempts to inform how long to wait for the element to become visible

action({
  attr: '//*[@id="page-walker"]/form/fieldset[1]/div[2]/div/input',
  text: "xpath",
  maxAttempts: 4,
}).type(faker.generateName());

elseIf action in element

// elseIf with input
cy.elseIf('input[name="cpf"]').type("07957743463", { force: true });

// else If with select
cy.elseIf('select[name="cpf"]')
  .value("07957743463")
  .select("07957743463", { force: true });

// else If with  button
cy.elseIf('button[name="cpf"]').click({ force: true });

// else If with  button and value/text
cy.elseIf('button[name="cpf"]').value("Click Me").click({ force: true });

// elseIf with label
cy.elseIf('label[name="cpf"]').value("Entry password").click({ force: true });

// elseIf with label
cy.elseIf('label[name="cpf"]').click({ force: true });

// Usando elseIf para selecionar um elemento com um seletor CSS específico
cy.elseIf("#meuElemento").click({ force: true });

// Especificando o tipo de tag para um elemento existente e tratando-o conforme necessário
cy.elseIf(
  "#page-walker > form > fieldset:nth-child(3) > div:nth-child(3) > div:nth-child(2) > select[type=text]"
)
  .value("minhaOpção")
  .select("minhaOpção", { force: true });

// Para um botão, por exemplo, apenas para verificar se existe
cy.elseIf("#meuBotao").value("Click Me").click({ force: true });

cy.elseIf(
  "#page-walker > form > fieldset:nth-child(3) > div:nth-child(2) > div > input[type=text]"
).type(faker.generateName(), { force: true });

Mixed Functions

cy.action({ attr: selects.fillName })
  .click()
  .elseIf('input[name="name"]')
  .type("Test");

cy.action({ attr: selects.fillEmail })
  .click()
  .act('name="email"') //action
  .type("Test#test.com");

cy.action({ attr: selects.fillName })
  .click()
  .If('input[name="name"]') // elseIf
  .type("Test");

Use BDD in cy.action

import { Dado, Cenario, faker, Quando, E, Entao } from "../support/e2e";

Cenario("", function () {
  Dado("", function () {}, {});
  Quando("", function () {}, {});
  E("", function () {}, {});
  Entao("", function () {}, {});
});

BDD whit options skip and only

import { Dado, Cenario, faker, Quando, E, Entao } from "../support/e2e";

Cenario("Tests", function () {

 Dado("Dado tests", function () {

 }, { skip: true });

 Quando("Quando tests", function () {

 }, { only: true });
});

Use cy.visit config

const { defineConfig } = require("cypress");

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      // implement node event listeners here
    },
  },
  viewportHeight: 1000,
  viewportWidth: 1400,

  env: {
    title: "Tests With Cypress and cy.action 💥",
    subTitle: "CY.ACTION presentation",
    styles: {
      background: "red",
      text: "green",
    },
  },
});

O cy.action integration generate-datafaker

Contributions

Contributions are always welcome. Feel free to open issues or send pull requests.

License

This project is licensed under the terms of the MIT License.

1.4.9

28 days ago

1.4.8

3 months ago

1.4.7

3 months ago

1.4.6

3 months ago

1.4.5

4 months ago

1.4.4

4 months ago

1.3.7

4 months ago

1.2.8

4 months ago

1.3.6

4 months ago

1.2.7

4 months ago

1.3.5

4 months ago

1.2.6

4 months ago

1.3.4

4 months ago

1.2.5

4 months ago

1.4.2

4 months ago

1.3.3

4 months ago

1.4.1

4 months ago

1.3.2

4 months ago

1.2.3

4 months ago

1.4.0

4 months ago

1.3.1

4 months ago

1.2.2

4 months ago

1.3.0

4 months ago

1.3.9

4 months ago

1.3.8

4 months ago

1.2.9

4 months ago

1.2.0

4 months ago

1.1.8

5 months ago

1.1.1

5 months ago

1.1.7

5 months ago

1.1.6

5 months ago

1.1.5

5 months ago

1.1.4

5 months ago

1.1.3

5 months ago

1.1.2

5 months ago

1.0.19

5 months ago

1.1.0

5 months ago

1.0.18

5 months ago

1.0.17

5 months ago

1.0.20

5 months ago

1.0.16

5 months ago

1.0.15

5 months ago

1.0.14

5 months ago

1.0.13

5 months ago

1.0.0

5 months ago