当前位置: 首页 > 知识库问答 >
问题:

使用Cypress-如何在特定状态下查找相邻项

鄂昌胤
2023-03-14

我有一个带有状态按钮的长表:

<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-tertiary">Not Met</button>
</td>
<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-tertiary">Not Met</button>
  <button class="conduct btn btn-warning">N/A</button>
</td>
<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-danger">Not Met</button>
  <button class="conduct btn btn-tertiary">N/A</button>
</td>
<td class="evaluation-button-cell">
  <button class="conduct btn btn-success">Met</button>
  <button class="conduct btn btn-tertiary">Not Met</button>
  <button class="conduct btn btn-tertiary">N/A</button>
</td>
<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-danger">Not Met</button>
</td>

我需要找到一个具有btn危险类的未满足按钮,它还有一个相邻的N/a按钮(具有btn材料类),然后单击N/a按钮。

我有点迷失在柏树的所有选项中,比如得到、找到、在里面等等。

我可以找到其中一个按钮,但不确定最好的方法是如何验证它旁边还有一个额外的按钮,并且两个按钮都有预期的类。

我的问题是我需要找到一个按钮,它有一个特定的类,与另一个按钮相邻,它有一个特定的类。Psuedo代码:

cy.contains('Not Met').and('has.class', 'btn-danger').next().contains('N/A).and('has.class', 'btn-tertiary')...and then somehow click the Not Met button :)

共有2个答案

淳于宏伯
2023-03-14

解析第一个按钮

cy.contains('Not Met').and('has.class', 'btn-danger')

这会失败,因为cy.contains('Not Met')生成一个主题,并且第一个包含文本“Not Met”的按钮没有所需的类。

我最近看到一个答案提到了合并选择器,这是一个有用的原则,当选择器不够具体,也就是说,你可以移动btn危险测试链:

cy.get('button[class*=btn-danger]').contains('Not Met')

OR 

cy.contains('button[class*="btn-danger"]', 'Not Met')

第一个选择器现在查找具有class属性([class…])的按钮包含(*=)“btn危险”,并具有文本“未满足”。

正确找到配对按钮

上面的成功与您提供的示例html,但要正确测试伴侣按钮,我们需要通过复制您的目标行并将第一行中的伴侣按钮更改为btn警告,即

html prettyprint-override"><td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-tertiary">Not Met</button>
</td>
<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-tertiary">Not Met</button>
  <button class="conduct btn btn-warning">N/A</button>
</td>

<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-danger">Not Met</button>
  <button class="conduct btn btn-warning">N/A</button>      <-- not what we seek
</td>

<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-danger">Not Met</button>
  <button class="conduct btn btn-tertiary">N/A</button>     <-- this is the one
</td>


<td class="evaluation-button-cell">
  <button class="conduct btn btn-success">Met</button>
  <button class="conduct btn btn-tertiary">Not Met</button>
  <button class="conduct btn btn-tertiary">N/A</button>
</td>
<td class="evaluation-button-cell">
  <button class="conduct btn btn-tertiary">Met</button>
  <button class="conduct btn btn-danger">Not Met</button>
</td>

问题在于

cy.get('button[class*=btn-danger]').contains('Not Met')

OR 

cy.contains('button[class*="btn-danger"]', 'Not Met')

它们只返回一个主题——虽然有三个按钮适合,但只返回第一个。

这可以通过将contains()部分合并到第一个选择器中来解决,

cy.get("button[class*='btn-danger']:contains('Not Met')")

这将生成满足条件的三个按钮。

要获得带有正确配套按钮的按钮,请使用具有相同模式的选择器的next()

cy.get("button[class*='btn-danger']:contains('Not Met')")
  .next("button[class*='btn-tertiary']:contains('N/A')")
  .click();
谭畅
2023-03-14

我从您的问题中了解到,您希望单击第二行“未满足”按钮旁边的N/A按钮。为此,您可以尝试以下方法。我在当地试过,这对我很有效,请告诉我进展如何!如果表具有某些id或唯一的类名,请使用该id或类名,否则请使用table。您可以使用next()方法到达N/A按钮,并使用:第N个子项(3)获取正确的行。

it("Check if cypress click the N/A button in the third row", () => {
    cy.visit('url_here');
    cy.wait(2000);
    cy.get('table > tbody > tr:nth-child(3) > td > button').contains("Not Met").next().click();      
})
 类似资料:
  • 问题内容: 我需要创建一个查询,并且需要和。 我正在解决使用该类的问题,该类是我在某个地方下载的。 这是我尝试实现的SQL: 这是代码,我在其中使用Hibernate类: 错误是: 如果我用类注释该行,则查询工作正常,但是我没有在SQL中获得过滤器… 基本上,查询会尝试在一个主详细信息架构中检索同时显示详细信息列表的所有主记录,例如,如果您想知道“哪些发票同时包含A和B产品”。 这就是为什么如果子

  • 问题内容: Hibernate不支持union,所以我想单独运行sql。但是最后如何合并这些值? 请告知如何分别执行两个sql,最后如何合并这些值? 问题答案: 请注意,UNION中的每个SELECT语句必须具有相同的列数。 这些列还必须具有相似的数据类型。另外,每个SELECT语句中的列必须具有相同的顺序。 如果是这样,请向您的查询添加别名: 您可以通过以下方式使用SQLQuery和AliasT

  • 我有一个微服务,它主要使用与其他微服务对话。使用Eureka的服务发现机制,这项工作非常出色。 现在我迫切需要使用连接到外部系统,并且仍然使用如下所示的配置执行负载平衡。 : : 从我看过的许多文档中,建议禁用eureka以允许从可用的服务器列表中获取负载平衡。我做了跟进,并使用以下配置禁用它。 : 这使我能够为针对外部系统的外部客户端执行负载平衡,但需要使用服务发现的所有其他外部客户端都已中断。

  • 问题内容: 这是一个示例代码: 因此,这个位于productOrderContainer中的表有几列,根据几件事,将有几行,每行都有几列。一个例子是: 我想做的是例如获取此表的第一行。(行具有ID ,例如:),然后再次在该行跨度中寻找特定值 所以在伪代码中我想说的是: 给我桌子,给我第n行,给我值 问题答案: 您可以尝试关注 您还可以遍历表行以执行所需的任何功能。

  • 嗨,我需要检查siteminder的状态,看看它是否已关闭。我当前的解决方案是在指定的环境中ping siteminder的策略服务器。是否有任何方法可以使用c#检查Siteminder是否正常运行?提前感谢

  • 我有一个打开的Excel文件,使用VB脚本,我只需要在Excel表中搜索列“a”,直到它匹配一个文本字符串。当脚本找到匹配时,我希望看到找到匹配的单元格的行号。多谢您提前帮忙!