在柏树中获取子元素

时间:2020-07-06 06:41:30

标签: jquery cypress

我想获取具有属性名称“ tag-test”且值为“ tab”的子元素

我要测试的html部分如下所示

  ... 
  <ul
     tag-test="tab"
  >
   <li  />
   <li  />
   <li  />
  />

现在我可以从li中获得最后一个ul作为jquery对象吗?

我控制台记录的以下代码显示

    ...
我该如何从
    ...
进一步发展?

cy.get('ul[tag-test]=tab')
  .then((ul) => { 
     console.log(ul)  // <ul> ... </ul> . 
   }) 
  

3 个答案:

答案 0 :(得分:3)

要在li中查找最后一个ul,可以使用CSS伪选择器last-child

例如,使用此测试片段

<ul tag-test="tab">
  <li>1</li>
  <li>2</li>
  <li>3</li>        // test should find this one
</ul>

<ul tag-test="another">
  <li>4</li>
  <li>5</li>
  <li>6</li>        // test should ignore this one
</ul>

测试可能是

cy.get('ul[tag-test=tab]')
  .find('li:last-child')     // use find here to restrict search to previous subject
  .contains('3')

或获取jQuery对象

cy.get('ul[tag-test=tab]')
  .find('li:last-child')
  .then($lastLI => {
    expect($lastLI).to.contain(3)
  })

答案 1 :(得分:1)

从您的代码中,我可以看到用于标签测试的定位器不正确,它应如下所示:

cy.get('ul [tag-test="tab"]')

使用此定位器,您将获得具有属性ul的所有tag-test="tab"元素

答案 2 :(得分:0)

您可以使用 .find 解决我们的问题

就您而言,

cy.get('ul[tag-test="tab"]')
.find('li')
  .then($li => {

     //$li will contain all the li elements inside your ul as an array
     cy.log($li)

     //if you want a specific li item use $li[index]
     cy.log($li[0])

     //if you want the last li item use the length of the returned li array
     cy.log($li[$li.lenght -1])

   })