首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在选择器Cypress中使用.length的结果

如何在选择器Cypress中使用.length的结果
EN

Stack Overflow用户
提问于 2018-08-21 15:17:03
回答 1查看 7.4K关注 0票数 5

我正在尝试根据先前断言的结果执行一个操作。我有以下情况,我想确定文档的版本数,这在下面的html中表示:

代码语言:javascript
复制
<ul data-testhook-id="accordion-body">
    <li data-testhook-id="accordion-body-item">
            <div>
                    <div data-testhook-id="version-1">
                        <div data-testhook-id="avatar">
                            <div data-id="tooltip">John Doe</div>
                            </div>
                        </div>
                        <span data-testhook-id="content">1. 17-08-2018 at 15:26</span>
                    </div>
                    <div data-testhook-id="version-2">
                        <div data-testhook-id="avatar">
                            <div data-id="tooltip">John Doe</div>
                            </div>
                        </div>
                        <span data-testhook-id="content">2. 20-08-2018 at 13:05</span>
                    </div>
                    <div data-testhook-id="version-3">
                        <div data-testhook-id="avatar">
                            <div data-id="tooltip">Jane Doe</div>
                            </div>
                        </div>
                        <span data-testhook-id="content">3. 20-08-2018 at 13:11</span>
                    </div>
                     <div data-testhook-id="version-4">
                        <div data-testhook-id="avatar">
                            <div data-id="tooltip">No Body</div>
                            </div>
                        </div>
                        <span data-testhook-id="content">4. 21-08-2018 at 13:11</span>
                    </div>
                    <svg width="12" height="12" data-testhook-id="icon-active-version"><path d="path-here"></path></svg>
                    </div>
            </div>
    </li>

每个带有测试id div的元素都是一行包含版本信息的data-testhook-id="version-xxx",我想要计算它的这些div元素。为此,我设置了以下内容:

代码语言:javascript
复制
cy.get('[data-testhook-id="accordion-body-item"] > div > div').its('length').as('versions')

现在,如果我添加以下断言,这将不会出现任何问题

代码语言:javascript
复制
cy.get('@versions').should('equal', 4)

但是如果我尝试使用发现的div数的结果作为console.log中的变量,我得到的不再是'4‘,而是object,Object。通过以下方式尝试过:

代码语言:javascript
复制
var size = cy.get('[data-testhook-id="asset-versions"] [data-testhook-id="accordion-body-item"] > div > div').its('length')
console.log('foo ' + size)

这导致foo [object Object]被打印到控制台。

我想要做的是使用选择器中的项数来选择一个元素,例如:

代码语言:javascript
复制
cy.get('[data-testhook-id="accordion-body-item"] > div > div:nth-child(' + size + ')').find('svg').should('have.attr', 'data-testhook-id', 'icon-active-version')

但是由于var不是一个数字,所以我得到msg

代码语言:javascript
复制
Error: Syntax error, unrecognized expression: :nth-child
[data-testhook-id="asset-versions"] [data-testhook-id="accordion-body-item"] > div > div:nth-child([object Object])

是否可以将找到的元素数量用作下一个选择器的变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 15:37:06

试试这个:

代码语言:javascript
复制
cy.get('[data-testhook-id="accordion-body-item"] > div > div').its('length').then((size) => {
   cy.get('[data-testhook-id="accordion-body-item"] > div > div:nth-child(' + size + ')').find('svg').should('have.attr', 'data-testhook-id', 'icon-active-version')
});

您不能分配或使用任何Cypress命令的返回值。命令被排入队列并异步运行。命令真正返回的是Chainable<typeOfValueYouWant>,换句话说,它是一种队列对象,可以根据所需的值进行解析。阅读更多here

顺便说一句:我认为你应该考虑改变你选择元素的方法。阅读更多here

对于那些正在使用Typescript的人-我为tslint写了一个插件,它可以防止犯这个错误:https://github.com/krzysztof-grzybek/tslint-plugin-cypress

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51943474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档