Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 柏树-如何通过文本内容查找?_Javascript_Cypress_End To End - Fatal编程技术网

Javascript 柏树-如何通过文本内容查找?

Javascript 柏树-如何通过文本内容查找?,javascript,cypress,end-to-end,Javascript,Cypress,End To End,在Cypress中,我想根据按钮的文本内容从一组按钮中选择一个按钮。我怎么做?我的做法如下: export const getCustomerButton = () => getNavigationSidenav() .find('mat-expansion-panel-header') .each(($el, index, $list) => { const text = $el.find('.mat-content > mat-panel-title').t

在Cypress中,我想根据按钮的文本内容从一组按钮中选择一个按钮。我怎么做?我的做法如下:

export const getCustomerButton = () => getNavigationSidenav()
  .find('mat-expansion-panel-header')
  .each(($el, index, $list) => {
    const text = $el.find('.mat-content > mat-panel-title').text();
    if (text === 'Customer') {
      return $el;
    }
    return null;
  });

现在的问题是我必须从元素数组中过滤掉空值。有没有一种不那么复杂的方法?

这将生成包含文本“Customer”的DOM元素,其中包含
YOUR\u BUTTON\u类。这就是你要找的吗

cy.get('YOUR_BUTTON_CLASS')。包含('Customer');

对于
。包含
cypress命令。

或者更巧妙的解决方案是使用以下命令:

cy.contains('YOUR_BUTTON_CLASS','Customer');

这是因为
contains()
可以容纳2个参数。如果它有两个参数,第一个总是元素,第二个是文本。

前面的答案中没有提到的另一个选项

使用

安装完成后,只需将其导入cypress'
commands.js

import'@testing library/cypress/add命令'
在你的测试中

cy.findAllByText(“成龙”)。单击();
cy.findByText(“按钮文本”)。应(“存在”);
cy.findByText(“不存在的按钮文本”)。应(“不存在”);
cy.findByLabelText(“标签文本”,{timeout:7000})。应(“存在”);
在(()=>{
cy.findByText(“按钮文本”)。应(“存在”);
});
然后((主题)=>{
cy.findByText(“按钮文本,{container:subject}”)。应该(“存在”);
});
这是非常简单和易于使用的。我们在生产站点和react测试库中使用它。强烈推荐:)

公认的答案“可以”起作用。但是:如果元素在第一次尝试时不可见,则在随后的重试中找不到该元素

见:

Cypress使用“Sizzle”作为选择器库-因此:

cy.get('button:contains(“FooBar”))


可以重试。

您有可以显示的HTML吗。我知道您已经得到了答案,但是您尝试选择的一些内容会有所帮助。请注意,像这样的链接命令可能会导致连锁反应,因为
get
在找到某个内容后不会重试,即使它找到的元素中没有一个包含“Customer”(请参阅)只是执行
cy.get('Customer'))
将尝试生成一个元素客户,而这不是我们所需要的。这是我将要使用的-谢谢提示!我只是想知道在安装这个插件之前,是否会
cy.findByText('Button')。click()
产生与内置命令
cy.contains('Button')相同的结果。click()
。如果没有,区别是什么?我做了一个快速测试,返回的按钮看起来略有不同,看到了吗,但它们都正常工作