Javascript 第二个相同的资产没有';我不能在柏树上工作

Javascript 第二个相同的资产没有';我不能在柏树上工作,javascript,cypress,Javascript,Cypress,我正在写一个代码来检查dropbox菜单的名称。对于第一个,它工作得很好,但是对于其他的,它向我显示了这个错误,即使dropbox是可见的。我没有更改代码,所以所有菜单都是一样的。 出现以下错误: 断言者 5000ms后重试超时:预期“”为“可见” 此元素不可见,因为它具有CSS属性:display:none 我的代码: it('Check the dropdown menu Onboarding', function () { cy.visit('http://localhost:

我正在写一个代码来检查dropbox菜单的名称。对于第一个,它工作得很好,但是对于其他的,它向我显示了这个错误,即使dropbox是可见的。我没有更改代码,所以所有菜单都是一样的。 出现以下错误:

断言者 5000ms后重试超时:预期“”为“可见” 此元素不可见,因为它具有CSS属性:display:none

我的代码:

 it('Check the dropdown menu Onboarding', function () {

    cy.visit('http://localhost:25000/', { timeout: 300000 })
    cy.wait(10000)
    cy.get('.dijitReset.dijitInline.dijitMenuItemLabel.dijitMenuItem:eq(1)').click() 
    cy.contains('Smartcard zuweisen').should('be.visible')
    cy.contains('Primäre Smartcard zuweisen').should('be.visible')
    cy.contains('Primäre Karte drucken und zuweisen').should('be.visible')
    cy.get('.dijitReset.dijitInline.dijitMenuItemLabel.dijitMenuItem:eq(1)').click() 
 
  })


it('Check the dropdown menu Kartenverwaltung', function () {
    //cy.visit('http://localhost:25000/', { timeout: 300000 })
    cy.wait(10000)
    cy.get('.dijitReset.dijitInline.dijitMenuItemLabel.dijitMenuItem:eq(2)').click()
    //cy.contains('Kartenverwaltung').should('be.visible')  
    cy.contains('Aktive und deaktivierte Karten')
    cy.contains('Karteninventar').should('be.visible')
    cy.contains('Personenübersicht').should('be.visible')
    cy.contains('Follow You Printing').should('be.visible')
    cy.contains('Staging-Tabelle').should('be.visible')
    cy.contains('Ausstehende Karten').should('be.visible')
    cy.contains('Gesperrte Karten').should('be.visible')
    cy.contains('Karte zurückgeben').should('be.visible')
    
})
第一个功能 ; ; ; ; ; ; ; ; ; ; ; ; ;工作正常。从第二个函数中,出现错误。有什么问题吗

前3名tr及其子女:

更新: 在不适用于“td”的下拉列表中:

错误:

上面的一行告诉我们元素不可见,但它存在于DOM中。断言的一种方法是可以使用
exist
而不是
be.visible
。它将验证元素是否存在于HTMLDOM中

cy.contains('Karteninventar').should('exist')
或者,如果滚动后有可见的元素,可以使用转到该元素,然后使用
should(be.visible)

例如

或者,如果要使用
display:none
属性直接断言元素,可以执行以下操作:

cy.get('#dijit_MenuItem_3_accel')
    .should('have.attr', 'style', 'display: none')

因此,根据所有提供的信息,这里是我对如何做到这一点的最佳猜测。我建议您采用数据驱动的方法,假设所有菜单都具有相同的模式(这可能不是真的,我不能肯定)

菜单数据中有一些空白,您必须从应用程序iteslf中填写

description('检查菜单',()=>{
常量菜单=[
{
编号:1
姓名:“入职”。
项目:[
“智能卡zuweisen”,
“Primäre智能卡zuweisen”,
“Primäre Karte drucken and zuweisen”,
]
},
{
编号:2
名称:“卡滕维沃尔顿”。
项目:[
“Aktive and deaktivierte Karten”,
//这里还有其他项目吗
]
},
//这里还有其他菜单吗
];
menus.forEach(menu=>{
它(`检查下拉菜单${menu.name}`,函数(){
参观http://localhost:25000/“,{超时:300000})
等一下(10000)
cy.get('.dijitReset.dijitInline.dijitMenuItemLabel.dijitMenuItem')
.eq(menu.number)。单击();//打开菜单
cy.get(`table[title=“${menu.name}]`).should('be.visible');//确认打开
menu.items.forEach(item=>{
cy.contains('td',item.).should('be.visible');//确认项
};
});
})

我还想问为什么
cy.get('.dijitReset.dijitInline.dijitMenuItemLabel.dijitMenuItem:eq(1)')。单击()
在第一次测试结束时第二次?关闭菜单?在第二次测试中,当你
cy.visit
访问时会发生什么,问题会消失吗?@AloysiusParker谢谢你的回答!我添加了“检查菜单”。这是下拉框的列表,例如在“Aktive und Deaktivierte Karten”下,我看到它显示:无。但在列表中,第一个“Onboard”写的都是相同的。第二个问题也写了dispay:none。2.对于第二个问题,我检查了不同的变化,是的,确实是关闭菜单,但没有帮助,就像我在第二个测试中添加cy.visit一样。你能将html作为文本发布吗?可能只是前3个问题看起来每行有3个单元格-第一个是图标,第二个是用户可见的文本,第三个是加速键,显示为:无(但我打赌它有一个按键事件处理程序)。我尝试将html添加为文本,但由于某些原因它不起作用,所以我添加了文本。我希望可以。很酷,与以前的模式相同。看起来Cypress正在混淆-内容“Karteninventar”没有
style=“display:none”
属性,这在下一个上。可能它选择了上面的内容,因为
cy.contains(myText)
将在所有子项中搜索“myText”。我将尝试使用一个更具针对性的命令,同时指定元素:
cy.contains('td','Karteninventar')。should('be.visible'))
@pavelsaman谢谢!使用“exist”它可以工作。但是当测试运行时,我看到元素是可见的,但是由于某些原因cypress没有看到。你知道可能是什么问题吗?@PolinaLisetska web应用css应该改为
显示:block
,或者如果元素是可见的,或者其他csse可能是这样保存的其他原因。在任何情况下,
exist
都可以正常工作,或者如果您想检查元素的样式属性是否为
display:none
,您也可以这样做,我已经更新了我的答案。
cy.contains('Karteninventar')。应该('exist')如何操作
对cy.contains('Karteninventar')执行任何不同的操作。?@Ackroydd True我刚刚看到一个文档,其中声明-获取包含文本的DOM元素。DOM元素可以包含比所需文本更多的内容,并且仍然匹配。
cy.scrollTo(0, 500)  //Scrolls down
cy.contains('Karteninventar').should('be.visible')
cy.get('#dijit_MenuItem_3_accel')
    .should('have.attr', 'style', 'display: none')