Javascript 柏树:可以';不要在断言中使用变量
我需要在过滤器中选择几个元素,并检查数据是否会根据过滤器显示。我试图在变量中保存元素的文本,并在最后检查它Javascript 柏树:可以';不要在断言中使用变量,javascript,cypress,Javascript,Cypress,我需要在过滤器中选择几个元素,并检查数据是否会根据过滤器显示。我试图在变量中保存元素的文本,并在最后检查它 it.only('the UI with a lot of entries in a filter, should be responsive', () => { let listItem1 let listItem2 cy.get('someTab').click().then(()=> { cy.getText(cy.get('someSelector
it.only('the UI with a lot of entries in a filter, should be responsive', () => {
let listItem1
let listItem2
cy.get('someTab').click().then(()=> {
cy.getText(cy.get('someSelector').first(), listItem1)
cy.getText(cy.get('someSelector').last(), listItem2)
}).then(()=> {
cy.get('someSelector').first().click()
cy.get('someSelector').last().click()
cy.get('someButton').click()
}).then(()=>{
cy.log(listItem1, listItem2) // nothing is visible
cy.get('span[data-app]').should('contain', listItem1) // fail
cy.get('span[data-app]').should('contain', listItem2) // fail
})
})
我使用此功能:
getText(selector, variable) {
return selector.invoke('text')
.then(($text) => {
variable = $text.trim()
})
}
它不起作用,但我无法理解如何修复它。基本问题在于
getText(选择器,变量)
您想要给出值的第二个参数是“按值”传递的,但要在以后设置和使用它,需要“按引用”传递
如果“按值传递”,则设置变量在函数之外没有效果
有关背景信息,请参阅
在javascript中不可能通过“引用”传递,但您可以包装在容器对象中并修改属性
函数getText(选择器、容器、变量名){
selector.invoke('text')
。然后($text)=>{
容器[variableName]=$text.trim()
})
}
它('UI…',()=>{
const container={//注意const,因为容器从不更改
listItem1:null,//只有属性会更改
listItem2:null
}
cy.get('someTab')。单击()。然后(()=>{
cy.getText(cy.get('someSelector').first(),容器'listItem1')
cy.getText(cy.get('someSelector').last(),容器'listItem2')
}).然后(()=>{
cy.get('someSelector').first().click()
cy.get('someSelector').last().click()
cy.get('someButton')。单击()
}).然后(()=>{
cy.log(container.listItem1);//listItem1可见
cy.log(container.listItem2);//listItem2可见
cy.get('span[data app]')。应('contain',container.listItem1)
cy.get('span[data app]')。应('contain',container.listItem2)
})
})
您可以将
getText()
更改为自定义命令
const容器={}
add('storeAs',{prevSubject:true},函数(subject,prop){
cy.wrap(主题)
.invoke('text'))
.然后(text=>container[prop]=text)
})
它('UI…',()=>{
cy.get('someTab')。单击()。然后(()=>{
cy.get(“someSelector”).first().storeAs('listItem1')
cy.get(“someSelector”).last().storeAs('listItem2')
}).然后(()=>{
...
}).然后(()=>{
cy.log(container.listItem1);//listItem1可见
cy.log(container.listItem2);//listItem2可见
cy.get('span[data app]')。应('contain',container.listItem1)
cy.get('span[data app]')。应('contain',container.listItem2)
})
})