赛普拉斯断言文本

Posted

技术标签:

【中文标题】赛普拉斯断言文本【英文标题】:Cypress assert text 【发布时间】:2021-12-21 23:00:33 【问题描述】:

我需要断言的错误摘要中的这段代码有问题:

<div id="#prices-form-wizard_es_" class ="errorSummary formSummary" style="display"> == $0
  <ul>
      <li>
      ::marker
      Lieferbeginn muss mind. 20 Werktage in der Zukunft liegen
      </li>

当我尝试使用此代码断言此文本时:

cy.get('.errorSummary > ul > li').eq(0)
.should('have.text', 'Lieferbeginn muss mind. 20 Werktage in der Zukunft liegen')

我收到错误消息:

AssertionError
Timed out retrying after 20000ms: 
expected '<li>' to have text 'Lieferbeginn muss mind. 20 Werktage in der Zukunft liegen',
but the text was 'dummy'

我想::marker 条目会导致这里出现问题,但我不知道解决此问题的方法。

完整的 html

<form novalidate="novalidate" id="prices-form-wizard" action="test" method="post" data-dashlane-rid="86657b96f87d2628" style="position: relative;" data-form-type="other">
<input type="hidden" value="VEpQdDJCdE5uRDNBY2dCbE9tb1d0aE5FVEJlbUtJZjTHM5EBAf5bb250N_5-qprVWUq4nbUElJO1EnMXhm39hA==" name="YII_CSRF_TOKEN"><div class="successSummary form-submit-summary" style="display: none;">
    <p>Änderungen gespeichert</p>
    <a href="javascript:void(0)" class="summaryClose" onclick="$(this).closest('.successSummary').slideUp();return false;"><svg class="svg-inline--fa fa-times-circle fa-w-16" aria-hidden="true" focusable="false" data-prefix="fad" data-icon="times-circle" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""><g class="fa-group"><path class="fa-secondary" fill="currentColor" d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1a12 12 0 0 1 0 17L338 377.6a12 12 0 0 1-17 0L256 312l-65.1 65.6a12 12 0 0 1-17 0L134.4 338a12 12 0 0 1 0-17l65.6-65-65.6-65.1a12 12 0 0 1 0-17l39.6-39.6a12 12 0 0 1 17 0l65 65.7 65.1-65.6a12 12 0 0 1 17 0l39.6 39.6a12 12 0 0 1 0 17L312 256z"></path><path class="fa-primary" fill="currentColor" d="M377.6 321.1a12 12 0 0 1 0 17L338 377.6a12 12 0 0 1-17 0L256 312l-65.1 65.6a12 12 0 0 1-17 0L134.4 338a12 12 0 0 1 0-17l65.6-65-65.6-65.1a12 12 0 0 1 0-17l39.6-39.6a12 12 0 0 1 17 0l65 65.7 65.1-65.6a12 12 0 0 1 17 0l39.6 39.6a12 12 0 0 1 0 17L312 256z"></path></g></svg><!-- <i class="fad fa-times-circle"></i> --></a>
</div><div id="prices-form-wizard_es_" class="errorSummary formSummary" style="display: flow-root;"><a href="javascript:void(0)" class="summaryClose" onclick="$('#prices-form-wizard_es_').slideUp();return false;">
            <svg class="svg-inline--fa fa-times-circle fa-w-16" aria-hidden="true" focusable="false" data-prefix="fad" data-icon="times-circle" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""><g class="fa-group"><path class="fa-secondary" fill="currentColor" d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1a12 12 0 0 1 0 17L338 377.6a12 12 0 0 1-17 0L256 312l-65.1 65.6a12 12 0 0 1-17 0L134.4 338a12 12 0 0 1 0-17l65.6-65-65.6-65.1a12 12 0 0 1 0-17l39.6-39.6a12 12 0 0 1 17 0l65 65.7 65.1-65.6a12 12 0 0 1 17 0l39.6 39.6a12 12 0 0 1 0 17L312 256z"></path><path class="fa-primary" fill="currentColor" d="M377.6 321.1a12 12 0 0 1 0 17L338 377.6a12 12 0 0 1-17 0L256 312l-65.1 65.6a12 12 0 0 1-17 0L134.4 338a12 12 0 0 1 0-17l65.6-65-65.6-65.1a12 12 0 0 1 0-17l39.6-39.6a12 12 0 0 1 17 0l65 65.7 65.1-65.6a12 12 0 0 1 17 0l39.6 39.6a12 12 0 0 1 0 17L312 256z"></path></g></svg><!-- <i class="fad fa-times-circle"></i> --></a>
<ul><li>Lieferbeginn muss mind. 20 Werktage in der Zukunft liegen</li><li>Lieferende muss ausgefüllt sein, um Preise für diesen Tarif abzufragen</li></ul></div><input name="PricesWizardForm[tariff_type]" id="PricesWizardForm_tariff_type" type="hidden" value="1">
    <div class="form-section multi-flex">
        <div class="section-part">
            <div class="portlet-separator">
                <span>Produkt &amp; Preis</span>
            </div>
...

【问题讨论】:

你试过了:cy.get('#prices-form-wizard_es_ &gt; ul &gt; li').eq(0) ? 是的,那是我的第一次尝试 请道歉,但似乎我在第一次尝试时打错了。 cy.get('#prices-form-wizard_es_ &gt; ul &gt; li').eq(0)确实有效。我想我忘记了最后一个下划线:(( 【参考方案1】:

你可以试试id。由于 id 在网页上是唯一的,因此在可用的情况下使用 id 始终是一个好习惯。

cy.get('#prices-form-wizard_es_').should('include.text', 'Lieferbeginn muss mind. 20 Werktage in der Zukunft liegen')

【讨论】:

是的,应该补充一点,我也已经尝试过使用 id。结果与 OP 中描述的相同。第二次尝试是上课,这是我在这里发布的代码。 我的猜测是它会进入错误的元素。添加您正在处理的元素的确切 html 请道歉,但似乎我在第一次尝试时打错了。 cy.get('#prices-form-wizard_es_ &gt; ul &gt; li').eq(0) 确实有效。 这个问题仍然是一个很好的提醒,提醒每个人尽可能使用 ID。记住这一点

以上是关于赛普拉斯断言文本的主要内容,如果未能解决你的问题,请参考以下文章

.should('exist') 断言在赛普拉斯上是多余的吗?

有没有办法断言赛普拉斯没有调用路由?

如何检查在赛普拉斯 e2e 测试中元素是不是永远不可见?

如何在赛普拉斯中使用灯具列表断言列表

赛普拉斯测试因断言等于 DOM 标题而失败

赛普拉斯在开玩笑断言中导致类型错误