赛普拉斯获取特定路径内的元素

时间:2020-07-03 08:44:15

标签: javascript testing automated-tests cypress

使用赛普拉斯自动化一些测试,我发现了这个问题。

我们正在向客户询问许多问题,根据先前的答案,这些问题将一一出现。在显示下一个问题(例如答案的种类)之前,它是未知的。我以这里的示例为例,其中每个“ div”(不是“ rootDiv”)都是一个问题,只有在上一个响应后才会显示它们。

    <div class="rootDiv">
        <div class="type1">
           <div class="type1b">
              <button class="button1">
              <button class="button1">
           </div>
        </div>
        <div class="type2">
           <div class="type2b">
              <button class="button2">
              <button class="button2">
              <button class="button2">
              <button class="button2">
           </div>
        </div>
        <div class="type1">
           <div class="type1b">
              <button class="button1">
              <button class="button1">
           </div>
        </div>
        .
        .
        .
       <div class="typeX">
           <div class="typeXb">
              <button class="buttonX">
              <button class="buttonX">
              <button class="buttonX">
              <button class="buttonX">
           </div>
       </div>
    </div>

所以我面临的问题是:

  1. 有没有办法访问“ rootDiv”中的最后一个“ div”,检查其类并基于它单击任何按钮?
  2. 有没有办法将“文本”写在最后一个“ div”的按钮上?
  3. 有没有办法获取元素列表(在这种情况下为按钮)并遍历它们?

有很多解决方案,主要问题取决于如何获取这些元素

1 个答案:

答案 0 :(得分:1)

  1. 有没有办法访问“ rootDiv”中的最后一个“ div”,检查其类并基于它单击任何按钮?

可以访问'rootDiv'中的最后一个'div':cy.get('.rootDiv div').last()。但是,检查类然后根据类的值执行操作是一个坏主意,因为它是conditional testing,而赛普拉斯并不是真正为此而生。但是,如果您真的需要这种态度(没有其他更好的方法),我认为这是可行的。

  1. 有没有办法将“文本”写在最后一个“ div”的按钮上?

是的,可以获取最后一个div的“文本”。 cy.get('.rootDiv div').last().invoke('text').then((textOnTheButton) => {console.log(textOnTheButton})

3。是否有一种方法来获取元素列表(在这种情况下为按钮)并对其进行遍历?

要获取所有按钮,您需要的是cy.get(button)。如果要使用索引遍历所有索引,则可以使用for循环和eq(),但是对于所有情况,它可能不是最佳/最有效的解决方案。