Inconsistent assert behavior for text
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- javascript, node.js
- Domínio
- testing-qa
Direção de pesquisa
Comece executando os cenários fornecidos usando examples/returns.html e examples/bootstrap.html e, em seguida, compare I.see, I.waitForText e I.grabTextFrom com #app e #app.at(1). Rastreie de onde cada assertion obtém o texto e como o normaliza. O trabalho estará concluído quando o comportamento esperado do texto estiver definido e consistente entre esses métodos, seletores e casos de espaços em branco e estilização.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Hello!
While experimenting with codecept I noticed inconsistent behaviors between the testing methods.
Here are two tests:
- The first contains spans that have numbers in them. The asserts are generally consistent (they add spaces to each span) except grabTextFrom, which adds \n.
- The second is much more problematic. In this one, the HTML also contains spans, but with bootstrap styles on the spans. We can see that:
- I.see adds spaces
- I.waitForText does not
- nor does I.grabTextFrom
- BUT when we add .at(1) to the locator, it changes the behavior of waitForText().
The way the text is asserted changes depending on:
- the CSS of the page
- the assertion method used
- the selector
- the whitespaces in the HTML
import { writeFileSync } from "node:fs";
import { resolve } from "node:path";
Feature("Spans");
Scenario("text line returns", async ({ I }) => {
const file = `${resolve(process.cwd(), "examples", "returns.html")}`;
writeFileSync(file, `
<div id="app">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
`);
I.amOnPage(`file://${file}`);
const appLocator = locate("#app");
I.see("1 2 3", appLocator);
I.waitForText("1 2 3", 1, appLocator);
const text = await I.grabTextFrom(appLocator);
I.expect(text).toEqual("\n 1\n 2\n 3\n ");
I.see("1 2 3", appLocator.at(1));
I.waitForText("1 2 3", 1, appLocator.at(1));
const text2 = await I.grabTextFrom(appLocator.at(1));
I.expect(text2).toEqual("\n 1\n 2\n 3\n ");
});
Scenario("test boostrap styles", async ({ I }) => {
const file = `${resolve(process.cwd(), "examples", "bootstrap.html")}`;
writeFileSync(file, `
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
<div class="d-flex align-items-baseline lh-1 monospace-numbers" id="app"><span class="text-nowrap fs-21 lh-1">0</span><span class="text-nowrap fs-21 lh-1">.</span><span class="text-nowrap fs-21 lh-1">8</span><span class="text-nowrap fs-21 lh-1">8</span><span class="text-nowrap fs-48 lh-1">6</span><span class="text-nowrap fs-48 lh-1">7</span><span class="text-nowrap fs-18 lh-1 align-self-start mt-1">8</span></div>
`);
I.amOnPage(`file://${file}`);
const appLocator = locate("#app");
I.see("0 . 8 8 6 7 8", appLocator);
I.waitForText("0.88678", 1, appLocator);
const text = await I.grabTextFrom(appLocator);
I.expect(text).toEqual("0.88678");
I.see("0 . 8 8 6 7 8", appLocator.at(1));
// IDK what it expects... it just does not work the same with .at(1)!!!!
// I.waitForText("0.88678", 1, appLocator.at(1));
const text2 = await I.grabTextFrom(appLocator.at(1));
I.expect(text2).toEqual("0.88678");
});
- Linguagem predominante
- JavaScript
- Estrelas
- 4.2k
- Forks
- 756
- Merge médio
- 1d 6h
- PRs com merge (30d)
- 19
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de codeceptjs/CodeceptJS
-
stale
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
codeceptjs/CodeceptJS#5420 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
stale
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
codeceptjs/CodeceptJS#5358 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
stale
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
codeceptjs/CodeceptJS#4958 · 10 comentários · 2 reações ·
Mantenedores costumam responder em até 1 dia
-
stale
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
codeceptjs/CodeceptJS#4778 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 68/100
codeceptjs/CodeceptJS#5725 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de codeceptjs/CodeceptJS
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
CircuitVerse/CircuitVerse#7967 · 1 comentário · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
CopilotKit/aimock#491 ·
Mantenedores costumam responder em até 1 dia
-
cvss-severity:high devguard l3montree-cybersecurity/.../devguard-documentation pkg:devguard/l3montree-c.../devguard-documentation risk:low state:open
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
l3montree-dev/devguard-documentation#338 · 1 comentário ·
-
bug runtime spec compliance
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
frostney/GocciaScript#1413 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
keyxmakerx/Chronicle#967 ·
Mantenedores costumam responder em até 1 dia